我在c#中有一段代码来检查一个值是否是一个有效的正则表达式模式。 代码很简单:
try
{
System.Text.RegularExpressions.Regex.IsMatch("", pattern);
}
catch (Exception)
{
return "pattern matches must be a valid regex value";
}
我正在尝试测试它是否正常工作,但我找不到无效的正则表达式模式..呵呵
有什么建议吗?
答案 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.
// ...
}
}