2009-06-04 2 views
1

여러 패턴과 일치하는 Perl의 정규 표현식을 찾고 PHP에서 preg_match_all 같은 모든 것을 반환하려고합니다.Perl에서 전역 정규식 일치를 수행하려면 어떻게해야합니까?

여기에 내가 가진 무엇 :

$str = 'testdatastring'; 
if($str =~ /(test|data|string)/) { 
     print "its found index location: $0 $-[0]-$+[0]\n"; 
     print "its found index location: $1 $-[1]-$+[1]\n"; 
     print "its found index location: $2 $-[2]-$+[2]\n"; 
     print "its found index location: $3 $-[3]-$+[3]\n"; 
} 

이는 나에게 이것에서 '테스트'첫 번째 일치를 제공합니다. 나는 'test', 'data'및 'string'과 같은 지정된 패턴의 모든 항목을 일치시킬 수 있기를 원합니다. '테스트', '데이터'와 '캐릭터'

if(preg_match_all('/(test|data|string)/', 'testdatastring', $m)) { 
     echo var_export($m, true); 
} 

위의 PHP 코드는 3 문자열을 일치합니다 :

나는 PHP, 당신은 목적이 종류으로, preg_match_all 사용할 수 있다는 것을 알고.

Perl에서이 작업을 수행하는 방법을 알고 싶습니다. 어떤 도움이라도 대단히 감사하겠습니다.

답변

10

펄 해당

preg_match_all('/(test|data|string)/', 'testdatastring', $m) 

에/g 플래그가 글로벌을 의미

@m = ("testdatastring" =~ m/(test|data|string)/g); 

입니다, 그래서 그것은리스트 컨텍스트에서 일치하는리스트를 반환한다.

+0

if/else 문에 어떻게 적용합니까? – Carel

+0

해결 : (@list = $ str = ~ Regex) {True} {False}/regex/g을 사용하여 발견 된 항목을 목록으로 그룹화합니다. – Carel

관련 문제