我读到了正则表达式
\ba
相当于
(?<!\w)a
但在此之前我已经想出可能
^a|\Wa
也是等同的
我的问题是:这两者有什么区别?有人可以写一个例子,如果它们不相同吗?
答案 0 :(得分:2)
\b
相当于(?:(?<!\w)(?=\w)|(?<=\w)(?!\w))
,所以
\ba
相当于(?:(?<!\w)(?=\w)|(?<=\w)(?!\w))a
,所以
\ba
相当于(?<!\w)a
,因为a
与\w
匹配。
\ba
和(?<!\w)a
都与^a|\Wa
和(?:^|\W)a
类似,偶尔可以互换,但它们不同,因为前两个匹配单个字符而后两者可以匹配两个。比较:
say '!@a#$' =~ s/\ba//r; # !@#$
say '!@a#$' =~ s/(?<!\w)a//r; # !@#$
say '!@a#$' =~ s/^a|\Wa//r; # !#$
say '!@a#$' =~ s/(?:^|\W)a//r; # !#$
答案 1 :(得分:0)
\ba
会将a
与字符串!a
匹配
而^a|\Wa
将匹配!a
这是我能提供的最短的例子,为什么它们不等同。