谁能解释正则表达式元字符\b
和\w
正则表达式元字符之间的区别?据我了解,这两个元字符都用于单词边界。除此之外,哪个元字符对多语言内容有效?
5 回答
元字符\b
是类似于插入符号和美元符号的锚。它匹配一个称为“单词边界”的位置。这个匹配是零长度的。
有资格作为单词边界的三个不同位置:
- 在字符串的第一个字符之前,如果第一个字符是单词字符。
- 在字符串的最后一个字符之后,如果最后一个字符是单词字符。
- 在字符串中的两个字符之间,其中一个是单词字符,另一个不是单词字符。
简单地说:允许\b
您使用. “单词字符”是可用于构成单词的字符。所有不是“单词字符”的字符都是“非单词字符”。\bword\b
在所有风格中,字符[a-zA-Z0-9_]
都是单词字符。这些也与速记字符类匹配\w
。在风味比较中为单词边界显示“ascii”的风味仅将这些识别为单词字符。
\w
代表“单词字符”,通常是[A-Za-z0-9_]
. 注意包含下划线和数字。
\B
是 的否定版本\b
。在不\B
匹配的每个位置匹配。\b
实际上,\B
匹配两个单词字符之间的任何位置以及两个非单词字符之间的任何位置。
\W
是 的缩写[^\w]
,否定的版本\w
。
\w
匹配一个单词字符。\b
是一个零宽度匹配,它匹配一侧有单词字符的位置字符,而另一侧不是单词字符的位置字符。(不是单词字符的示例包括空格、字符串的开头和结尾等)
\w
匹配a
、b
、c
、d
、e
和f
in"abc def"
\b
匹配(零宽度)位置 before a
、 after c
、 befored
和 after f
in"abc def"
@Mahender,您可能是指\W
(而不是\w
)和\b
. 如果不是,那么我同意上面的@BoltClock 和@jwismar。否则继续阅读。
\W
将匹配任何非单词字符,因此很容易尝试使用它来匹配单词边界。问题是它与行的开头或结尾不匹配。\b
更适合匹配单词边界,因为它也会匹配行的开头或结尾。粗略地说(有经验的用户可以在这里指正)\b
可以认为是(\W|^|$)
. [编辑:正如@Ωmega 下面提到的,\b
是一个零长度匹配,所以(\W|^|$)
不是严格正确的,但希望有助于解释差异]
快速示例:对于字符串Hello World
,.+\W
将匹配Hello_
(与空格)但不会匹配World
。.+\b
将匹配Hello
和World
。
\b <= this is a word boundary.
匹配后面有单词字符但前面没有单词字符的位置,或者前面有单词字符但后面没有单词字符的位置。
\w <= stands for "word character".
它总是匹配 ASCII 字符 [A-Za-z0-9_]
你有什么特别想匹配的吗?
一些对初学者有用的正则表达式网站,或者只是为了满足你的胃口。
- http://www.regular-expressions.info
- http://www.javascriptkit.com/javatutors/redev2.shtml
- http://www.virtuosimedia.com/dev/php/37-tested-php-perl-and-javascript-regular-expressions
- http://www.i-programmer.info/programming/javascript/4862-master-javascript-regular-expressions.html
我发现这是一本非常有用的书:
\w
不是单词边界,它匹配任何单词字符,包括下划线:[a-zA-Z0-9_]
. \b
是单词边界,即匹配单词和非字母数字字符之间的位置:\W
或[^\w]
.
但是,这些实现可能因语言而异。