在.Net4.5,我发现的
System.Text.RegularExpressions.Regex.IsMatch(
"00000000000000000000000000000", "^[1-9]|0$")
结果为真。
我期望的结果是错误的。我不知道为什么。你可以帮我吗?
更新: 在开始的时候,我被验证的正则表达式^-?[1-9]\d*|0$
这是用来匹配在互联网上找到整数,我发现有多个字符串0
正则表达式匹配。
在.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)$
正则表达式您输入相匹配 - 有右侧的解释:http://regex101.com/r/fB9yK0/1 – 2014-09-24 08:00:03
_你为什么期望它是假的?你认为这个正则表达式想说什么?你期待它的行为如同'^([1-9] | 0)$'? – 2014-09-24 08:02:29
@RayToal在我知道答案之前,我认为'^ [1-9] | 0 $'等于'^ [0-9] $'。 – SubmarineX 2014-09-24 08:09:21