【问题标题】:An invalid regex pattern无效的正则表达式模式
【发布时间】:2011-08-17 15:18:36
【问题描述】:

我在 c# 中有一段代码可以检查一个值是否是有效的正则表达式模式。

代码很简单:

   try
   {
      System.Text.RegularExpressions.Regex.IsMatch("", pattern);
   }
   catch (Exception ex)
   {
       return "pattern matches must be a valid regex value";
   }

我正在尝试测试它是否正常工作,但我找不到无效的正则表达式模式。

有什么建议吗?

【问题讨论】:

  • 我会说try{System.Text.RegularExpressions.Regex.IsMatch("", pattern);}catch (Exception){return "pattern matches must be a valid regex value";} 但这是一个正确的表达方式:)

标签: c# regex validation


【解决方案1】:

这是无效的...

[

您也可以在http://regexhero.net/tester/实时测试正则表达式的有效性

顺便说一句,您实际上不必针对字符串测试正则表达式来查看它是否有效。您可以简单地实例化一个新的 Regex 对象并捕获异常。

这就是 Regex Hero 返回详细错误消息的方式...

public string GetRegexError(string _regexPattern, RegexOptions _regexOptions)
{
    try
    {
        Regex _regex = new Regex(_regexPattern, _regexOptions);
    }
    catch (Exception ex)
    {
        return ex.Message;
    }

    return "";
}

【讨论】:

    【解决方案2】:

    试试这个:

    *
    

    顺便说一句,在 Java 中有一种将字符串编译为模式的方法,它会抛出异常并进行精确的错误诊断。

    【讨论】:

    【解决方案3】:

    这是一个不正确表达式的示例:

    [0-9]++
    

    【讨论】:

    • 这是一个有效的正则表达式。
    【解决方案4】:

    这是另一个。任何以 single 反斜杠(悬空反斜杠)结尾的内容都是无效的。

    BOOM\
    

    【讨论】:

      【解决方案5】:

      如果你想测试,如果它工作正常,你需要用有效和无效的模式测试它,这应该使用像NUnit这样的单元测试框架来完成。

      还可以显示更详细的错误消息,如 C# Cookbook 中所建议的那样;见章节8.3. Verifying the Syntax of a Regular Expression

      这是一个带有一些测试数据的简单示例类(也是available on .Net Fiddle,您可以在浏览器中立即运行它)

      using System;
      using System.Text.RegularExpressions;
                          
      public class Program
      {
          public static Boolean validateRegEx(String pattern) 
          {   
              if (pattern == null || pattern.Length == 0) 
              {
                  System.Console.Out.WriteLine("RegEx '{0}' is NOT valid. The pattern may not be empty or null.", pattern);
                  return false;
              }
              
              try 
              { 
                  new Regex(pattern);
                  System.Console.Out.WriteLine("RegEx '{0}' is valid.", pattern);
                  return true;
              }
              catch (ArgumentException ex) If 
              {
                  System.Console.Out.WriteLine("RegEx '{0}' is NOT valid: {1}", pattern, ex.Message);
                  return false;
              }
          }
          
          public static void Main()
          {
              // Invalid regular expressions:
              validateRegEx(""); // The pattern may not be empty or null.
              validateRegEx(null); // The pattern may not be empty or null.
              validateRegEx("**"); // Quantifier {x,y} following nothing.
              validateRegEx("\\"); //  Illegal \ at end of pattern.
              validateRegEx("AABB???"); // Nested quantifier ?.
              validateRegEx("AA(C(B)A"); // Not enough )'s.
              validateRegEx("AA(C)B)A"); // Too many )'s.
      
              // Valid regular expressions:
              validateRegEx("A"); // 'A' is valid.
              validateRegEx(".*ABA.?"); // '.*ABA.?' is valid.
              validateRegEx("AB?A"); // 'AB?A' is valid.
              validateRegEx("AB*A"); // AB*A' is valid.
              validateRegEx("A(BB){1,4}"); // 'A(BB){1,4}' is valid.
              // ...
          }
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2020-08-11
        • 1970-01-01
        • 2011-08-09
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-07-08
        相关资源
        最近更新 更多