W 和 b 正则表达式元字符之间的差异

有人能解释 \b\w正则表达式元字符之间的区别吗?我的理解是,这两个元字符都用于单词边界。除此之外,哪个元字符对于多语言内容是有效的?

248497 次浏览

\w匹配一个单词字符。\b是一个零宽度匹配,匹配的位置字符一边是单词字符,另一边不是单词字符。(非单词字符的例子包括空格、字符串的开头和结尾等。)

\w匹配 "abc def"中的 abcdef
\b匹配 a之前、 c之后、 d之前和 "abc def"f之后的(零宽度)位置

见: http://www.regular-expressions.info/reference.html/

@ Mahender,你可能指的是 \W(而不是 \w)和 \b之间的区别。如果没有,那么我同意上面的@BoltClock 和@jwismar。否则继续读。

\W将匹配任何非单词字符,因此很容易尝试使用它来匹配单词边界。问题是它不会匹配行的开始或结束。\b更适合于匹配单词边界,因为它也将匹配一行的开始或结束。粗略地说(更有经验的用户可以在这里纠正我) \b可以被认为是 (\W|^|$)。[编辑: 正如@Ωmega 下面提到的,\b是一个零长度匹配,所以 (\W|^|$)不是严格正确的,但希望有助于解释差异]

快速示例: 对于字符串 Hello World.+\W将匹配 Hello_(使用空格) ,但不匹配 World.+\bHelloWorld都匹配。

元字符 \b是像插入符号和美元符号一样的锚。它匹配的位置称为 “词语界限”。这场比赛是零长度。

有三种不同的位置符合词语界限:

  • 在字符串中的第一个字符之前,如果第一个字符是 一个单词字符。
  • 在字符串的最后一个字符之后,如果 最后一个字符是一个单词字符。
  • 中的两个字符之间 字符串,其中一个是单词字符,另一个不是单词字符。

简单地说: \b允许您使用 \bword\b形式的正则表达式执行 “只能用完整的单词”搜索。“字符”是一种可以用来构成单词的字符。所有不是 “字符”的字符都是 “非文字字符”

在所有风格中,字符 [a-zA-Z0-9_]都是单词字符。这些字符也由简写字符类 \w匹配。在风味比较中显示 “ Ascii”作为单词边界的风味只将这些风味识别为单词字符。

\w代表 “字符”,通常是 [A-Za-z0-9_]。注意包含了下划线和数字。

\B\b的否定版本。\B匹配 \b不匹配的每个位置。有效地,\B匹配两个单词字符之间的任何位置以及两个非单词字符之间的任何位置。

\W[^\w]的简称,[^\w]\w的否定版本。

\w没有的一个单词边界,它匹配任何单词字符,包括下划线: [a-zA-Z0-9_]\b 一个单词边界,即它匹配一个单词和一个非字母数字字符之间的位置: \W[^\w]

不过,这些实现可能因语言而异。

\b <= this is a word boundary.

匹配位置,该位置后跟一个单词字符但前面没有单词字符,或者前面有单词字符但后面没有单词字符。

\w <= stands for "word character".

它总是匹配 ASCII 字符[ A-Za-z0-9 _ ]

你有什么特别想匹配的吗?

一些有用的正则表达式网站为初学者或只是湿你的胃口。

我发现这是一本非常有用的书: