C# 无效的正则表达式模式
我用c语言编写了一段代码,用于检查一个值是否是有效的正则表达式模式 代码是直截了当的:C# 无效的正则表达式模式,c#,regex,validation,C#,Regex,Validation,我用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 ex)
{
return "pattern matches must be a valid regex value";
}
我试图测试它是否正常工作,但我找不到无效的正则表达式模式
有什么建议吗?这是无效的
[
您还可以在以下位置实时测试正则表达式的有效性:
顺便说一句,您实际上不必针对字符串测试正则表达式以查看它是否有效。您可以简单地实例化一个新的Regex对象并捕获异常
这是Regex Hero返回详细错误消息的步骤
public string GetRegexError(string _regexPattern, RegexOptions _regexOptions)
{
try
{
Regex _regex = new Regex(_regexPattern, _regexOptions);
}
catch (Exception ex)
{
return ex.Message;
}
return "";
}
试试这个:
*
顺便说一句,在Java中,有一种方法可以将字符串编译为模式,它会抛出一个带有精确错误诊断的异常。下面是一个不正确表达式的示例:
[0-9]++
这是另一个。任何以单个反斜杠(悬挂反斜杠)结尾的内容都无效
BOOM\
如果您想要测试,如果它工作正常,您需要使用有效和无效的模式来测试它,这应该使用一个单元测试框架来完成,比如 还可以显示更详细的错误消息,正如C#Cookbook中所建议的那样;见本章 下面是一个简单的示例类,其中包含一些测试数据(也可以在浏览器中立即运行)
我会说
try{System.Text.RegularExpressions.Regex.IsMatch(“,pattern);}catch(Exception){return“pattern matches必须是一个有效的正则表达式”;}
但这是一个正确的表达式:).NET也有它,它是Regex.Compile
。是吗?不是Regex.CompileToAssembly吗?
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.
// ...
}
}