为什么这个单词边界正则表达式不匹配

时间:2017-06-04 11:13:24

标签: c# regex

这是示例文本:

  

项目1:1。一种操作方法。

匹配1.

\b1\.

匹配1.

\b1\.\b

我需要为1.进行完全匹配我正在对其进行测试here

1 个答案:

答案 0 :(得分:1)

.不是单词字符。 \b正在检查边界,即字词和字符之间的边界不被视为字词的一部分。因此,您不能指望.位于" word" 1.因为这两个字符没有形成单词。

Quick reference document\b描述为:

  

匹配必须发生在\ w(字母数字)和\ W(非字母数字)字符之间的边界上。

\w被描述为:

  

匹配任何单词字符。

如果你检查Word character是什么,你会发现它包括Unicode类 Ll [Letter,Lowercase] ; Lu [Letter,大写] ; Lt [Letter,Titlecase] ; 罗[信,其他] ; Lm [Letter,Modifier] ; Mn [Mark,Nonspacing] ; Nd [数字,小数位] Pc [标点,连接器]

.有Unicode类 Po [标点符号,其他] ,上面没有列出。

因此,如果您希望\b1.中的字边界匹配,则它位于1.之间。这回答了您的问题为什么

注意: .NET regex表达式最好在专用于它们的测试站点上进行测试,例如Regex Storm。如果你使用PCRE正则表达式测试你的正则表达式(比如你链接的站点),你可以从.NET得到不同的结果。