C#中Regex.IsMatch出现异常行为:正则匹配结果看似不正确
问题根因
你对正则规则的核心认知不存在偏差,问题出在方法传参的书写失误上,和正则逻辑本身无关。
调用IsMatch方法时,你传入的并非存储了值"3"的变量entryStr,而是被双引号包裹的硬编码字面字符串 "entryStr"。这个字符串的实际内容就是字母e、n、t、r、y、S、t、r拼接出的普通文本,和你定义的变量没有任何关联。
对应运行结果的逻辑是完全自洽的:
- 硬编码的
"entryStr"文本中包含字符e、f,正好落在[a-f]的匹配范围内,因此校验返回True - 这段硬编码文本里没有任何0-9范围的数字字符,因此
[0-9]规则的校验返回False
整个匹配流程全程没有涉及你赋值给变量的字符串"3"。
修正方案
删掉IsMatch传参时多余的双引号,直接传入待校验的变量即可:
// 错误代码 Console.WriteLine("[a-f]: " + regex.IsMatch("entryStr")); Console.WriteLine("[0-9]: " + numRegex.IsMatch("entryStr")); // 修正后代码 Console.WriteLine("[a-f]: " + regex.IsMatch(entryStr)); Console.WriteLine("[0-9]: " + numRegex.IsMatch(entryStr));
补充注意事项
默认状态下,Regex.IsMatch只要在传入字符串的任意位置找到符合规则的内容就会返回True。如果你的需求是校验整个字符串完全符合指定规则,需要给正则表达式加上首尾锚定符^和$,例如把规则改写为^[a-f]$、^[0-9]$,避免出现类似"a1"这类混合内容被误判为匹配的问题。
内容的提问来源于stack exchange,提问作者Petro
相关产品推荐
相关产品推荐

