问题
谁能解释\w
和\b
正则表达式元字符之间的区别?
据我所知,这两个元字符都用于字边界。除此之外,哪个元字符对多语言内容有效?
#1 热门回答(213 赞)
元字符\b
是一个像插入符号和美元符号的锚。它在一个名为a**"word boundary"**的位置匹配。此匹配为零长度。
有三种不同的职位符合词边界:
- 在字符串中的第一个字符之前,如果第一个字符是单词字符。
- 在字符串中的最后一个字符之后,如果最后一个字符是单词字符。
- 字符串中的两个字符之间,其中一个是单词字符,另一个不是单词字符。
简单地说:\b
允许你执行a**"仅限整个单词"search使用\bword\b
形式的正则表达式。 A"word character"是一个可用于形成单词的字符。所有字符不是"字符"are"非字字符"**。
在所有风格中,characters[a-zA-Z0-9_]
都是单词字符。这些也与短手字符类\w
相匹配。显示**"ascii"**的风味比较中的字边界仅识别这些字符。
\w
stands为**"字符字符"**,通常为[A-Za-z0-9_]
。请注意包含下划线和数字。
\B
是在\b
没有的每个位置的否定版本\b
.\B
匹配。实际上,\B
匹配两个单词字符之间的任何位置以及两个非单词字符之间的任何位置。
\W
是28177421的缩写,否定版本为\w
。
#2 热门回答(20 赞)
\w
匹配单词character.\b
是一个零宽度匹配,匹配一侧有单词字符的位置字符,另一侧不是单词字符。 (不是单词字符的例子包括空格,字符串的开头和结尾等)
\w
matchesa
,b
,c
,d
,e
,和f
in"abc def"
\b
匹配a
之前的(零宽度)位置,之后是c
,之前是d
,之后是f
in"abc def"
请参阅:http://www.regular-expressions.info/reference.html/
#3 热门回答(6 赞)
@Mahender,你可能意味着\W
(而不是\w
)和\b
之间的区别。如果没有,那么我同意上面的@BoltClock和@jwismar。否则继续阅读。
\W
将匹配任何非单词字符,因此很容易尝试使用它来匹配单词边界。问题是它不匹配一行的开头或结尾.\b
更适合匹配字边界,因为它也会匹配一行的开头或结尾。粗略地说(更有经验的用户可以在这里纠正我)\b
可以被认为是(\W|^|$)
。 [编辑:正如@Ωmega在下面提到的,\b
是一个零长度匹配so(\W|^|$)
并不严格正确,但希望有助于解释差异]
快速示例:对于字符串Hello World
,.+\W
匹配Hello_
(带空格)但不匹配World
..+\b
将匹配Hello
和World
。