我刚写了一个正则表达式来做一个基本的语法检查,如果一个字符串是一个有效的数学公式.我只是定义了一组有效的字符并检查字符串是否匹配(我稍微缩短了正则表达式:
private static readonly String validFormuar = @"^[\d\+-\*\/]+$";
private static bool IsValidFormular(String value)
{
return Regex.IsMatch(value, validFormuar);
}
Run Code Online (Sandbox Code Playgroud)
在这个例子中,我只允许使用数字+, - ,*和/.
因为+,*和/是正则表达式中的特殊字符,所以我将它们转义了.
但是,此代码抛出ArgumentException(从德语翻译)
"^[\d\+-\*\/]+$" is beeing analyzed - [x-y]-area in reversed Order.
Run Code Online (Sandbox Code Playgroud)
如果我双重逃避*
private static readonly String validFormuar = @"^[\d\+-\\*\/]+$";
Run Code Online (Sandbox Code Playgroud)
结果如预期.
这是System.Text.RegularExpressions解析器中的错误吗?因为我认为我的第一个正则表达式是正确的.如果没有,为什么我必须两次逃避"*"?
我认为你会发现"-"在正则表达式中也是一个特殊字符(至少"[]"在位内).它指定一系列字符,如"[0-9]"含义和含义"0123456789".
你的第二个工作的原因,但你的第一个不工作是因为:
+之后*(范围误差).+来之前\(范围内没有错误).澄清一下,你的第二个正则表达式(@"^[\d\+-\\*\/]+$")实际上意味着:
"\d"; 要么"\+" thru "\\"(相当大的范围,包括数字和大写字母); 要么"*"; 要么"\/"虽然它编译,但它不是你想要的(因为第二个要点).我试试这个:
@"^[\d\+\-\*\/]+$"
Run Code Online (Sandbox Code Playgroud)