无效的正则表达式模式

时间:2011-08-17 15:18:36

标签: c# regex validation

我在c#中有一段代码来检查一个值是否是一个有效的正则表达式模式。 代码很简单:

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

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

有什么建议吗?

5 个答案:

答案 0 :(得分:29)

这是无效的......

[

您还可以在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 "";
}

答案 1 :(得分:8)

以下是非正确表达式的示例:

[0-9]++

答案 2 :(得分:6)

试试这个:

*

BTW,在Java中有一种方法可以将字符串编译为模式,并且它会抛出一个带有精确错误诊断的异常。

答案 3 :(得分:1)

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

BOOM\

答案 4 :(得分:0)

如果要测试,如果测试正常,则需要使用有效模式和无效模式进行测试,该测试应使用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.
        // ...
    }
}