Regex Perl正则表达式字边界等价
我读到了正则表达式Regex Perl正则表达式字边界等价,regex,perl,equivalence,word-boundary,Regex,Perl,Equivalence,Word Boundary,我读到了正则表达式 \ba 相当于 (?<!\w)a 也相当于 我的问题是:这两者有什么区别?如果他们不相等,有人能写一个例子吗?\b相当于(?:(?),所以 \ba相当于(?:(?),所以 \ba相当于(?因为a匹配\w) \ba和(?与^a |\Wa和(?:^ |\W)a相似,有时可以互换,但它们不同,因为前两个匹配一个字符,后两个可以匹配两个。比较: say '!@a#$' =~ s/\ba//r; # !@#$ say '!@a#$' =~ s/(?<
\ba
相当于
(?<!\w)a
也相当于
我的问题是:这两者有什么区别?如果他们不相等,有人能写一个例子吗?
\b
相当于(?:(?),所以
\ba
相当于(?:(?),所以
\ba
相当于(?因为a
匹配\w
)
\ba
和(?与^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; # !#$
说“!@a#$”=~s/\ba//r;#@#$
说“!@a#$”=~s/(?\b
相当于(?:(?),所以
\ba
相当于(?:(?),所以
\ba
相当于(?因为a
匹配\w
)
\ba
和(?与^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; # !#$
说“!@a#$”=~s/\ba//r;#@#$
说“!@a#$”=~s/(?\ba
将匹配字符串!a
的a
而^a|\Wa
将匹配!a
这是我能提供的最短示例,说明它们为什么不相等。\ba
将匹配a
字符串!a
而^a|\Wa
将匹配!a
这是我能提供的最简短的例子,说明了为什么它们不相等。(?仅在单词的开头匹配,\b
将在单词的任意一端断言。@dawg是的,但是a
是一个单词字符,这意味着在\ba
中,\b
只能在非单词位于左侧的情况下满足。(?仅在单词的开头匹配,\b
将在单词的任一端断言。@dawg是的,但是a
是一个单词字符,这意味着在\ba
中,\b
只能在非单词位于左侧的情况下满足。另一个示例:表示“!!a!!”=~/(!\ba)/g、
如果我不处理子匹配,而只处理整个字符串匹配,我的“解决方案”可以吗?你认为如何?我正在编写一个只识别L(正则表达式)集的NFA。否。说“!a”=/^[x!(?:\ba | b)\z/?“匹配”:“不匹配”
(这并不意味着没有\b
就不可能重写模式)只需运行它,然后将\ba
替换为(?:^a |\Wa)
,然后再次运行。您会得到不同的结果。另一个示例:表示“!!a!!”=~/(!\ba)/g;
如果我不处理子匹配,但只处理整个字符串匹配,我的“解决方案”可以吗?您认为如何?我正在编写一个只识别L(regex)的NFAset.No.说“!a”=~/^[x!](?:\ba | b)\z/?“匹配”:“不匹配”
(这并不意味着没有\b
就无法重写模式)只需运行它,然后将\ba
替换为(?:^a\Wa)
然后再次运行它。你会得到不同的结果。!
是非单词字符,所以我认为你错了,regex\Wa
匹配字符串!a
!
是非单词字符,所以我认为你错了,regex\Wa
匹配字符串!a