正则表达式,漏洞?表达不够")"

时间:2017-12-14 13:38:02

标签: c# regex

我要将此行与ABC123457123457

相匹配
Regex regex = new Regex(@"^(ABC|[])[0-9]{7}$");

所有在线正则表达式测试人员都认为这是正确的,并且按预期工作 由于空System.Text.RegularExpression

,可能是[]中的错误

1 个答案:

答案 0 :(得分:4)

您不能在.NET正则表达式中使用[]来表示空字符串。如果您将正则表达式粘贴到.NET正则表达式测试站点中,您将看到

enter image description here

实际上,您的表达式被解析为

  • ^ - 字符串开头
  • ( - 开始捕获小组
  • ABC - 文字子字符串
  • | - 或
  • [ - 开始一个角色类
    • ])[0-9 - ])[,数字
  • ]{7} - 7次出现
  • $ - 字符串结束。

这里没有结尾)

要修复当前模式,只需使用可选的非捕获组:

Regex regex = new Regex(@"^(?:ABC)?[0-9]{7}$");
                           ^^^^^^^^

请参阅regex demo