Perl-regex词边界等价

时间:2014-09-03 16:36:08

标签: regex perl

扩展我的基本正则表达式知识,有些事情对我来说不清楚。

如果\b匹配单词边界,则下两个正则表达式具有相同的含义 - 例如会匹配相同的字符串吗?

/\bword\b/
/(^|\W)word(\W|$)/m    #when multi-line is turned on
/(\A|\W)word(\W|\z)/

问因为\b表示字边界。这个词是\w+,因此\b必须是不是\w的任何内容,例如它必须是\W或字符串或行的开头或结尾。 (或者没有?)(不计算捕获组,可能会更好地使用一些非捕获外观)。

和那两个?

/word\B/
/word\w/

如果必须是"非字边界"最后,这意味着单词必须后跟\w(单词)字符。 (或没有?)

2 个答案:

答案 0 :(得分:5)

(忽略以下模式中的空格。我假设/x用于提高可读性。)


\b

相当于

(?<!\w)(?=\w) | (?<=\w)(?!\w)

所以

\b word \b

相当于

(?: (?<!\w)(?=\w) | (?<=\w)(?!\w) ) word (?: (?<!\w)(?=\w) | (?<=\w)(?!\w) )

简化为

(?<!\w) word (?!\w)

您建议的等价物略有不同。


\B

相当于

(?<=\w)(?=\w) | (?<!\w)(?!\w)

所以

word \B

相当于

word (?: (?<=\w)(?=\w) | (?<!\w)(?!\w) )

简化为

word (?=\w)

您建议的等效内容(word\w)略有不同。

答案 1 :(得分:3)

\bword(?<!\w)word相同,word\bword(?!\w)相同

\Bword等于(?<=\w)wordword\B等于word(?=\w)