2

在我正在阅读有关正则表达式的脚本中,它说:

  • '\b'击中单词的前边界
  • '\<'击中单词的开头

那么使用以下有什么区别

  • \b超过\<
  • \b超过\>
4

3 回答 3

4

\b就像\<\>结合:

  • \<在单词的开头匹配,
  • \>在词尾匹配,
  • \b在单词的开头或结尾匹配,
  • \B匹配单词的开头或结尾除外。
于 2012-04-13T18:53:08.967 回答
4

man grep告诉我\b

符号 \<\> 分别匹配单词开头和结尾的空字符串。该符号\b与单词边缘的空字符串匹配,[...]

所以\bfoo\b会匹配任何匹配的地方\<foo\>

另一方面:正则表达式的变体太多了,很难说出你的\b.

于 2012-04-13T18:52:14.437 回答
3

您的来源似乎是错误的,或者至少是不完整的。\b匹配任何边框,而不仅仅是前面的边框。报价man grep

符号\<\>分别匹配单词开头和结尾的空字符串。该符号\b与单词边缘的空字符串匹配

  • grep's\b等价于grep's\(\<\|\>\)

如果您熟悉 Perl 正则表达式,

  • grep's\<等价于 Perl 的(?<!\w)(?=\w)
  • grep's\>等价于 Perl 的(?<=\w)(?!\w)
  • grep's\b等价于 Perl 的\b
  • grep's\b等价于 Perl 的(?:(?<!\w)(?=\w)|(?<=\w)(?!\w))
于 2012-04-13T20:07:11.227 回答