Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/google-apps-script/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Regex Perl正则表达式字边界等价_Regex_Perl_Equivalence_Word Boundary - Fatal编程技术网

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