带有扩展字符集的字边界

时间:2011-12-16 19:22:36

标签: regex word-boundaries

\w匹配[a-zA-Z0-9_]对我来说似乎有点奇怪。我想知道为什么在单词字符之间计算0-9_以及为什么单词字符之间不计算-

如果我想分开句子:

This is counter-example.

(\w*\b)它会将反例这两个字分成两部分。同样,(count.*?\b)仅匹配counter

是否可以使用\b之类的结果,-包含在单词字符(\w)中?

或者我误解了\b的用法?是否有一些标准用法的例子?

2 个答案:

答案 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