在.Net4.5中,我发现
System.Text.RegularExpressions.Regex.IsMatch(
"00000000000000000000000000000", "^[1-9]|0$")
是真的。
我期望的结果是错误的。我不知道为什么 你能帮助我吗?
更新:一开始,我正在验证正则表达式^-?[1-9]\d*|0$
,该正则表达式用于匹配在互联网上找到的整数,并且我发现具有多个字符串与0
正则表达式匹配。
问题是交流发电机的绑定行为。默认情况下(即,不使用分组),包含交流发电机(|
)的表达式将匹配交流发电机左侧的值或右侧的值。
因此,在表达式中,您要匹配以下任意一个:
^[1-9]
0$
您对IsMatch
方法的调用返回,true
因为这两个选项中的第二个与字符串匹配00000000000000000000000000000
。
要将交流发电机的绑定限制在表达式的特定部分,您需要使用括号进行分组,如下所示:
^([1-9]|0)$
将所有这些放在一起,一个严格的表达式可以验证整数,不允许前导零和负零,如下所示:
^(-?[1-9][0-9]*|0)$
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句