正则表达式——7.4 单词边界
单词边界的准确解释是:一端必须出现\w
能匹配的字符,另一端不出现\w
能匹配的字符。在JavaScript、PHP、Python 2、Ruby中,\w
只能匹配[0-9a-z-A-Z_]
。所以在这些语言中,\b\w+\b
能用来匹配几乎所有的英文单词。
字符串 | 正则表达式 | 能否匹配 | 说明 |
---|---|---|---|
tom,jerry(半角标点) | \btom\b | 能 | \w不能匹配半角标点 |
tom,jerry(全角标点) | \btom\b | 否 | \w可以匹配全角标点 |
tom和jerry | \b和\b | 否 | \w可以匹配中文字符 |
汤姆,jerry(半角标点) | \btom\b | 能 | \w不能匹配半角标点 |
汤姆,jerry(全角标点) | \btom\b | 否 | \w可以匹配全角标点 |
总的来说,如果使用 Unicode 匹配规则,尽量不要在处理中英文混排文本时使用\b
。如果使用 ASCII 匹配规则,则可以再处理英文文本时放心地使用\b
。
也有更复杂的情况,比如 Java 就是如此。在 Java 中,虽然\w
只能匹配[0-9a-zA-Z_]
,\b
对“单词字符”的判断确实按照 Unicode 匹配规则的。后面有详情