문제

다음 문자열의 세 단어를 Perl 호환 정규 표현식과 어떻게 일치시킬 수 있습니까?

Word1#$ Word2#$ Word3

실제 단어 "Word1, Word2 및 Word3"을 미리 알 수 없습니다. 분리기 만 알고 있습니다.

멀티 바이트 인코딩이 있으므로 경계라는 단어를 사용할 수 없습니다. 예를 들어, 문자열은 w 컨트롤 문자로 감지되지 않은 Umlauts와 같은 비 ASCII 문자를 포함 할 수 있음을 의미합니다.

도움이 되었습니까?

해결책

이 정규 표현을 시도하십시오.

/(\w+)#\$(\w+)#\$(\w+)/

편집하다귀하가 더 많은 정보를 제공 한 후에 (이 답변의 의견 참조) :

/((?:[^#]+|#[^$])*)#\$((?:[^#]+|#[^$])*)#\$((?:[^#]+|#[^$])*)/

다른 팁

#!/usr/bin/perl

use strict;
use warnings;

my $x = 'word1#$word2#$word3';
print $_, "\n" for split /#\$/, $x;
$str = explode('#$', $str);

Regex는 이것에 대해 과잉입니다.

스플릿 함수는 라인으로 무엇을하고 싶은지에 달려 있지만 유용 할 수 있습니다.

그래도 예입니다.

my $line = "word1#$word2#$word3"
my @words = split('#$', $line)

이것은 2가있는 모든 문자열에 대해 작동합니다 #

/([^#]+)\#\$([^#]+)\#\$([^#]+)/
/([^#]*?)#\$([^#]*?)#\$([^#]*)/
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top