\ w和\ b正则表达式元字符之间的区别

时间:2012-08-08 22:38:56

标签: javascript java php regex perl

有人可以解释\w\b正则表达式元字符之间的区别吗?

我的理解是这两个元字符都用于字边界。除此之外,哪个元字符对多语言内容有效?

5 个答案:

答案 0 :(得分:233)

元字符\b是一个像插入符号和美元符号的锚点。它匹配的位置称为“单词边界”。这个匹配是零长度。

有三种不同的职位符合词边界:

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

简单地说:\b允许您使用\bword\b形式的正则表达式执行“仅限整个单词”搜索。 “单词字符”是可用于形成单词的字符。所有不是“字符”的字符都是“非字字符”

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

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

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

\W[^\w]的缩写,是\w的否定版本。

答案 1 :(得分:20)

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

\w匹配a中的bcdef"abc def" }
\b匹配a之前的{零宽度]位置,c之后,d之前,f之后的"abc def"

请参阅:http://www.regular-expressions.info/reference.html/

答案 2 :(得分:6)

@Mahender,您可能意味着\W(而不是\w)和\b之间存在差异。如果没有,那么我同意上面的@BoltClock和@jwismar。否则继续阅读。

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

快速示例:对于字符串Hello World.+\W将匹配Hello_(与空格)但不匹配World.+\b会匹配HelloWorld

答案 3 :(得分:4)

\b <= this is a word boundary.

匹配一个后跟单词字符但不以单词字符开头的位置,或前面带有单词字符但后面没有单词字符的位置。

\w <= stands for "word character". 

始终匹配ASCII字符[A-Za-z0-9 _]

你有什么具体的想法吗?

一些有用的正则表达式网站,适合初学者或只是为了满足您的胃口。

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

答案 4 :(得分:2)

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

但这些实现可能因语言而异。