C# &引用;00000000000000000000000000000”字样;匹配Regex“^[1-9]“0美元”;
在.Net4.5中,我发现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的字符串与正则表达式匹配。问题是交流发电机的绑定行为。默认情况下(即不使用分组),包含交流发电机
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确实如此。从这个问题上看,实际的目标并不明确,但我会更新我的答案以反映你的评论。事实上,我认为这是必要的。哦,我省略了一对括号。非常感谢。