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


142

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


11
\w代表一个单词字符,而\b代表一个单词字符和一个非单词字符之间的单词边界。他们不是一回事。
BoltClock

Answers:


259

元字符\b是锚号,例如插入号和美元符号。它在称为“单词边界”的位置匹配。此匹配为零长度。

有三个不同的位置可以作为单词边界:

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

简而言之:\b允许您使用形式的正则表达式执行“仅全词”搜索\bword\b。阿“字字符”是可用于形成字的字符。不是“单词字符”的所有字符都是“非单词字符”

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

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

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

\W[^\w]的否定版本\w


21

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

\w比赛abcde,和f"abc def"
\b比赛前的(零宽度)的位置a,之后c,前d,后和f"abc def"

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


3
说它是单词字符而不是单词字符之间的边界是更正确的,因为如果该字符位于字符串的开始/结尾,则它也在单词字符和字符串的开头或结尾之间匹配。
MRAB '08年

5
仍然不太正确。 \b零宽度断言;它与字符不符,与位置不符。
艾伦·摩尔

10

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

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

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


我与的\b意思不同(\W|^|$),因为(\W|^|$)匹配结果中将包含非单词字符。您可以在这里=> regexr.com/3qf98检查此事实。
维克多

\b对我来说,含义与(?<=\W|^|$)在模式之前使用和(?=\W|^|$)在模式之后使用时相同。您可以在这里查看我在说什么=> regexr.com/3qf9h。只需\b在此处与锚点的结果进行比较=> regexr.com/3qf9t
Victor

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字符。 。
蒂尔·皮尔斯

2

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

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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.