2016-11-30 6 views
0

나는 정규식펄 정규 표현식 단어 경계 등가

\ba 

(?<!\w)a 

에 해당 것을 읽을 수 있지만 그 전에 나는 어쩌면

^a|\Wa 

이 너무 상응하는 것을 파악했다

제 질문은 : 화 t는 그 둘의 차이입니까? 누군가가 동등하지 않은 경우 예제를 작성할 수 있습니까? 그래서

\ba(?<!\w)a\wa 때문에 일치 동등하다

+0

'(? dawg

+0

@dawg 예,하지만'a'는 단어 문자입니다. 즉,'\ ba'에서'\ b'는 비 단어가 왼쪽에있는 경우에만 만족할 수 있습니다. – hobbs

답변

2

\b(?:(?<!\w)(?=\w)|(?<=\w)(?!\w))는 동등하므로

\ba(?:(?<!\w)(?=\w)|(?<=\w)(?!\w))a는 동일하다.


모두 \ba(?<!\w)a 때때로 교환되는 점에 모두 ^a|\Wa(?:^|\W)a 유사하지만 이전 두 단일 문자를 일치 후자의 두 개의 일치 할 수 있기 때문에 그들은 다르다. 비교 : 이것은 그들이 동등하지 않은 이유가 제공 할 수있는 짧은 예이다 !a

일치합니다 !a ^a|\Wa 동안

say '[email protected]#$' =~ s/\ba//r;   # [email protected]#$ 

say '[email protected]#$' =~ s/(?<!\w)a//r; # [email protected]#$ 

say '[email protected]#$' =~ s/^a|\Wa//r;  # !#$ 

say '[email protected]#$' =~ s/(?:^|\W)a//r; # !#$ 
+0

다른 예 :'say for '!! a !!' = ~/(! | \ ba)/g;' – ikegami

+0

서브 쿼리를 처리하지 않고 문자열 전체가 일치하는 경우 내 "솔루션"은 괜찮습니까? 어떻게 생각해? 나는 L (정규식) 세트 만 인식하는 NFA를 작성하고 있습니다. –

+0

아니요! ""~ ~/^ [x!] (? : \ ba | b) \ z /? "일치": "일치하지 않음"; (이것은 '\ b'없이 패턴을 다시 쓰는 것이 불가능 함을 의미하지는 않습니다.) – ikegami

0

\ba 문자열에 대한 a 일치합니다.

+0

'!'는 단어가 아닌 문자이므로 여러분이 틀렸다고 생각합니다. 정규 표현식'\ Wa'는 문자열'! a'와 일치합니다. –

+0

맞아요, 역순으로 썼습니다. –