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

Mah*_*der 133 javascript php java regex perl

谁能解释\b\w正则表达式元字符之间的区别?

据我所知,这两个元字符都用于字边界.除此之外,哪个元字符对多语言内容有效?

Ωme*_*ega 243

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

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

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

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

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

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

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

\W是否为[^\w]否定版本\w.


jwi*_*mar 20

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

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

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

  • 它仍然不太对劲.`\ b`是零宽度断言; 它与*字符*不匹配,它匹配*位置*. (5认同)
  • 说它是单词字符而不是单词字符之间的边界更为正确,因为如果字符位于字符串的开头/结尾,它也匹配单词字符和字符串的开头或结尾. (3认同)

mta*_*riq 8

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

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

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


jam*_*non 5

\b <= this is a word boundary.
Run Code Online (Sandbox Code Playgroud)

匹配后跟单词字符但前面没有单词字符的位置,或者前面有单词字符但不跟单词字符的位置。

\w <= stands for "word character". 
Run Code Online (Sandbox Code Playgroud)

它总是匹配 ASCII 字符 [A-Za-z0-9_]

你有什么特别想要匹配的吗?

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

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

  • 这是一个很好的答案,但记住 `\w` 并不总是等同于 ASCII 字符 `[A-Za-z0-9_]` - 它也将匹配字母数字 Unicode 代码点,并且可能匹配如果区域设置适当,则为 8 位 ISO-Latin-1 字符。 (5认同)