c# - 这是 dotnet Regex-Parser 中的错误吗?

标签 c# .net regex

我刚刚编写了一个正则表达式来执行基本语法检查字符串是否是有效的数学公式。 我只是定义了一组有效字符并检查字符串是否匹配(我稍微缩短了正则表达式:

    private static readonly String validFormuar =  @"^[\d\+-\*\/]+$";
    private static bool IsValidFormular(String value)
    {
        return Regex.IsMatch(value, validFormuar);
    }

在此示例中,我将只允许使用数字、+、-、* 和/。
因为 +、* 和/是正则表达式中的特殊字符,所以我将它们转义了。
但是这段代码抛出一个 ArgumentException(翻译自德语)

"^[\d\+-\*\/]+$" is beeing analyzed - [x-y]-area in reversed Order.

如果我双重转义 *

    private static readonly String validFormuar =  @"^[\d\+-\\*\/]+$";

结果符合预期。
这是 System.Text.RegularExpressions 解析器中的错误吗?因为我认为我的第一个正则表达式是正确的。如果不是,为什么我必须两次转义“*”?

最佳答案

我认为您会发现 "-" 也是正则表达式中的一个特殊字符(至少在 "[]" 位中)。它指定了一个字符范围,如“0-9”的含义和“0123456789”

第二个有效而第一个无效的原因是:

  • + 出现在 * 之后(范围错误)。
  • + 出现在 \ 之前(在范围内没有错误)。

为了澄清,你的第二个正则表达式 (@"^[\d\+-\\*\/]+$") 实际上意味着:

  • "\d" ;或
  • "\+"到 "\\"(相当大的范围,包括数字和大写字母);或
  • "*" ;或
  • "\/"

虽然它可以编译,但它不是您想要的(因为第二个要点)。我会试试这个:

@"^[\d\+\-\*\/]+$"

关于c# - 这是 dotnet Regex-Parser 中的错误吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1152105/

相关文章:

c# - 为什么我不能合并两个 JArray?

c# - MonoDevelop 中的 XML 注释

c# - 在自定义 WebAPi 内调用时,Azure 语音 API 会陷入无限循环

c# - 正确删除 StyleCop R# 插件

.net - 任何用于医疗诊断和数据挖掘的 .NET 开源项目

.net - 如何从自定义编辑器更新 PropertyGrid?

jquery - 在 JQUERY 中使用 RegEx 仅检查整数

python - {m,n} 不匹配 m 以下但匹配 n 以上。为什么?

python - 使用 python/psycopg2 循环遍历 PostgreSQL 表时发出 w/UPDATE

c# - 无法将泛型类的子类添加到列表中