"00000000000000000000000000000"匹配正则表达式"^ [1-9] | 0 $"

Sub*_*neX 14 .net c# regex

在.Net4.5中,我发现了结果

System.Text.RegularExpressions.Regex.IsMatch(
    "00000000000000000000000000000", "^[1-9]|0$")
Run Code Online (Sandbox Code Playgroud)

是真的.

我期望的结果是错误的.我不知道为什么.你能帮助我吗?

更新:开始时,我正在验证^-?[1-9]\d*|0$用于匹配互联网上找到的整数的正则表达式,我发现多个字符串与0正则表达式匹配.

Rob*_*sen 46

问题是交流发电机的绑定行为.默认情况下(即不使用分组),包含交流发电机(|)的表达式将匹配交流发电机左侧的值或右侧的值.

所以在你的表达式中,你匹配以下任何一个:

  • ^[1-9]
  • 0$

您对该IsMatch方法的调用将返回,true因为这两个选项中的第二个与字符串匹配00000000000000000000000000000.

要限制交流发电机与表达式特定部分的绑定,需要使用括号进行分组,如下所示:

^([1-9]|0)$
Run Code Online (Sandbox Code Playgroud)

把所有这些放在一起,一个严格的表达式来验证整数,不允许前导零和负零,可能看起来像这样:

^(-?[1-9][0-9]*|0)$
Run Code Online (Sandbox Code Playgroud)

  • 要扩展它,你需要在你想要OR的部分周围添加括号`()`:`^([1-9] | 0)$`或只是`^ [0-9] $` (2认同)