【发布时间】:2017-06-04 20:21:34
【问题描述】:
【问题讨论】:
-
根本不清楚您为什么需要
\b- 只需1\.已经返回所需的完全匹配。 -
我不想匹配像
1.2这样的东西 -
.和[ ]之间的边界(句点后的空格)不是单词边界,因此您指定的正则表达式行为正确。
【问题讨论】:
\b - 只需1\. 已经返回所需的完全匹配。
1.2这样的东西
. 和 [ ] 之间的边界(句点后的空格)不是单词边界,因此您指定的正则表达式行为正确。
. 不是单词字符。 \b 正在检查 word 边界,即单词和不被视为单词一部分的字符之间的边界。因此,您不能指望. 在“单词”1. 内,因为这两个字符不构成单词。
Quick reference document 将\b 描述为:
匹配必须出现在 \w(字母数字)和 \W(非字母数字)字符之间的边界上。
而\w被描述为:
匹配任何单词字符。
如果您检查Word character 是什么,您会发现它包含Unicode 类Ll [字母,小写]; Lu [字母,大写]; Lt [字母,大写]; Lo [字母,其他]; Lm [字母,修饰符]; Mn [标记,非间距]; Nd [数字,十进制数字] 和 Pc [标点符号,连接符].
但是. 有Unicode 类Po [Punctuation, Other],上面没有列出。
因此,如果您希望 \b 匹配 1. 中的单词边界,则它正好在 1 和 . 之间。这回答了您的问题为什么。
注意: .NET 正则表达式最好在专用于它们的测试站点上进行测试,例如 Regex Storm。如果您使用 PCRE 正则表达式风格测试您的正则表达式(例如在您链接的网站上),您可以从 .NET 获得不同的结果。
【讨论】: