2012-09-27 5 views
3

Perl에서 정규 표현식을 통해 OR 함수를 수행하는 스크립트를 작성하려고합니다. 문자열에 'D'또는 'E'다음에 'P'가 있으면 "D 또는 E 다음에 P"를 표시하고 그렇지 않으면 "D 또는 E 뒤에 P가 없습니다"라는 코드를 작성했습니다. $ s = 'ABCDEABCDEPABCDEAB'을 주면 else 조건을 인쇄해야한다고 가정하지만 if 문이 제대로 작동하지 않는다고 생각합니다. 도와주세요.perl에서 정규 표현식의 조건이

my $s = 'ABCDEABCDEPABCDEAB'; 
if ($s =~ /D|E(?=P)/) { 
    print "D or E is followed by P"; 
} 
else { 
    print "D or E is not followed by P"; 
} 
+0

위 패턴에 대해 생각해 보면 'if'부분을 인쇄해야합니다. 'E'다음에 'P'가 ... ABCDEABCD ** EP ** ABCDEAB –

답변

7
if ($s =~ /[DE]P/) { 
    print "D or E is followed by P"; 
} 
else { 
    print "neither D nor E is followed by P"; 
} 
+1

+1 . 그룹이 아니며 캡처 그룹이 아닙니다. 큰. – simbabque

+0

@ 싼 바브 크 .. 고마워요 :) –

+0

@RohitJain : 고마워요! 내 대답이있어. – prashant

0

나는 당신의 문제는 괄호 관련된 생각이 시도 : 또한

$s =~ m/(D|E)(?=P)/

, 당신이 지금 위치 (9)에서 EP이 당신의 문자열에서 그 말씀을 전합니다, 그것은 평가합니다 true.

0

사용 데미안 콘웨이의 Regexp::Debugger하고 'rxrx'기능을 사용해보십시오. 정규식 매치에서 매 문자 비교를 통해 당신을 단계별로 처리하므로 정확히 언제 무엇을 매치하는지 볼 수 있습니다. 굉장히 유용하다. 그것은 또한 당신이 perl을 실행하는 경우 좋은 색상없이 Windows에서 DOS로 실행됩니다.