\w
匹配[a-zA-Z0-9_]
对我来说似乎有点奇怪。我想知道为什么在单词字符之间计算0-9
和_
以及为什么单词字符之间不计算-
。
如果我想分开句子:
This is counter-example.
(\w*\b)
它会将反例这两个字分成两部分。同样,(count.*?\b)
仅匹配counter
。
是否可以使用\b
之类的结果,-
包含在单词字符(\w
)中?
或者我误解了\b
的用法?是否有一些标准用法的例子?
答案 0 :(得分:2)
\w
与下划线以及大写和小写字母匹配的事实是历史性的:这是因为它首先被引入以匹配C标识符。
嗯,这对于Java的\w
是正确的(是的,\w
与Java中的重音字符不匹配。)
\b
但是它是一个锚点,不是,它是由单词字符和非单词字符之间的边界定义的,实际上它是依赖于实现的。
没有一个锚可以做你想要的,但如果你想匹配单词和短划线,最好的选择是\w*(-\w*)*
。
再次,normal* (special normal*)*
模式!
(和BTW,\b
只是某些方言中的“单词锚”,其他实现分别定义\<
和\>
而不是单词锚的开头和结尾)
[编辑严重错误]
答案 1 :(得分:1)
使用此:[\w-]*
例如,您希望匹配以e结尾并以co
开头的内容字符串:
This is counter-example.
正则表达式:
co[\w-]*e
匹配度:
counter-example