저는 Perl과 regex에 많은 경험이 있습니다. 그러나 이것은 나를 미치게 만들고있다, 나는 단지 그것에 대한 답을 찾을 수 없으며 나는 그것에 대한 이유도 볼 수 없다. 다음 코드를보고하십시오 : 당신이 볼 수 있듯이대괄호를 구분 기호로 사용할 경우 Perl 정규식이 작동하지 않습니다. 왜?
Yes
No
Yes
, 나는 변화하고있어 유일한 것은 정규식 구분 기호, 그리고 표현이 작동하지 않습니다 :
이my $str = 'Hello[world]';
say $str =~ m/\w+\[.*?\]/ ? 'Yes' : 'No';
say $str =~ m[\w+\[.*?\]] ? 'Yes' : 'No';
say $str =~ m(\w+\[.*?\]) ? 'Yes' : 'No';
이의 출력은 구분 기호가 대괄호 일 때 예상대로.
다른 사람이 왜 일치하지 않는지 설명해주세요. 사전에
감사합니다,
시스코
구분 기호로'[]'또는'()'를 사용해서 혼동하지 마십시오. (왜냐하면 그들은 정규 표현식에서 특별한 의미를 갖기 때문이다.) – nhahtdh
대괄호를 두 번 이스케이프 처리해야 할 것 같네요.하지만 그럴 수 있는지 여부는 확실하지 않습니다. 인터프리터는 리터럴 괄호, 문자 클래스 및 구분 기호를 어떻게 구분합니까? – Bergi
@Bergi : [인용 된 구문 구문 분석에 대한 세부 정보] (http://perldoc.perl.org/perlop.html#Gory-details-of-parsing-quoted-constructs) – nhahtdh