2012-08-08 81 views
109

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

+11

'\ w'代表一个单词*字符*,而'\ b'代表单词字符和非单词字符之间的单词边界。他们不是一回事。 – BoltClock 2012-08-08 22:41:32

回答

196

元字符\b是一个类似插入符号和美元符号的锚。它匹配的位置称为“字边界”。这场比赛是零长度。

有迹象表明,有资格作为单词边界的三个不同位置:

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

简单地说:\b允许您使用的\bword\b形式正则表达式来进行“全字匹配”搜索。A “单词字符”是可用于形成单词的字符。所有不是的字符“单词字符”都是“非单词字符”

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

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

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

\W是​​的缩写,\w的否定版本。

19

\w匹配单词字符。 \b是一个匹配位置字符的零宽度匹配,该位置字符在一侧具有单词字符,而另一侧则不是单词字符。 (即没有字字符的事实例包括空格,开始和结束字符串等)

\w比赛abcdef"abc def"
\b匹配(零-width)a前位置,c后,d之前,和之后在f"abc def"

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

+3

更准确地说,它是单词字符而不是单词字符之间的边界,因为如果该字符位于字符串的开始/结尾,它也匹配单词字符与字符串的开头或结尾。 – MRAB 2012-08-08 22:47:42

+0

你说得对,那是更正确的。我会编辑。 – jwismar 2012-08-08 22:49:09

+5

这还不完全正确。 '\ b'是一个零宽度断言;它不匹配*字符*,它匹配*位置*。 – 2014-09-13 19:33:36

6

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

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

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

1

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

尽管这些实现可能因语言而异。的位置处

4
\b <= this is a word boundary. 

相配后跟一个字字符,但不冠以一个字字符,或由一个字字符之前而不是之后是文字字符。

\w <= stands for "word character". 

它总是相匹配的ASCII字符[A-ZA-Z0-9 _]

是否有具体的你要匹配什么?

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

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

+5

这是一个很好的答案,但记住'\ w'并不总是等同于ASCII字符'[A-Za-z0-9_]' - 它也会匹配字母数字Unicode代码点,并且可能会如果区域设置适当,则匹配8位ISO-Latin-1字符。 – 2013-12-19 05:14:15

相关问题