C# &引用;00000000000000000000000000000”字样;匹配Regex“^[1-9]“0美元”;

C# &引用;00000000000000000000000000000”字样;匹配Regex“^[1-9]“0美元”;,c#,.net,regex,C#,.net,Regex,在.Net4.5中,我发现 System.Text.RegularExpressions.Regex.IsMatch( "00000000000000000000000000000", "^[1-9]|0$") 这是真的 我预期的结果是错误的。我不知道为什么。你能帮我吗 更新: 一开始,我在验证正则表达式^-?[1-9]\d*|0$,它用于匹配在internet上找到的整数,我发现具有多个0的字符串与正则表达式匹配。问题是交流发电机的绑定行为。默认情况下(即不使用分组),包含交流发电机

在.Net4.5中,我发现

System.Text.RegularExpressions.Regex.IsMatch(
    "00000000000000000000000000000", "^[1-9]|0$")
这是真的

我预期的结果是错误的。我不知道为什么。你能帮我吗

更新
一开始,我在验证正则表达式
^-?[1-9]\d*|0$
,它用于匹配在internet上找到的整数,我发现具有多个
0
的字符串与正则表达式匹配。

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

因此,在表达式中,匹配以下任一项:

  • ^[1-9]
  • 0$
IsMatch
方法的调用将返回
true
,因为这两个选项中的第二个与字符串
00000000000000000000000000000
匹配

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

^([1-9]|0)$

综上所述,验证整数的严格表达式(不允许前导零和负零)可能如下所示:

^(-?[1-9][0-9]*|0)$

正则表达式与您的输入匹配-右侧有一个解释:为什么您认为它是错误的?你认为regex想说什么?在我知道答案之前,@RayToal我认为
^[1-9]|0$
等于
^[0-9]$
。@RayToal我已经添加了
更新
@pwas在OP询问.NET正则表达式时不是PCRE。为了进一步扩展,您需要添加括号
()
围绕您想要或在其上的零件:
^([1-9]| 0)$
或仅
^[0-9]$
@Rhumborl确实如此。从这个问题上看,实际的目标并不明确,但我会更新我的答案以反映你的评论。事实上,我认为这是必要的。哦,我省略了一对括号。非常感谢。