【问题标题】:Parsing Error while using Regex使用正则表达式时解析错误
【发布时间】:2013-07-21 14:52:53
【问题描述】:

让我解释一下我面临的实际问题。

当我的 SearchString 是 C+ 时,下面的正则表达式设置工作正常。 但是,当我的搜索字符串是 C++ 时,它会抛出一个错误说明 --

  parsing "C++" - Nested quantifier +.

谁能告诉我如何克服这个错误?

RegExp = new Regex(Search_Str.Replace(" ", "|").Trim(), RegexOptions.IgnoreCase);

【问题讨论】:

  • 好吧,你还没有发布正则表达式:)

标签: c# regex parsing


【解决方案1】:

首先,我相信你会通过查看一些正则表达式教程而不是在你目前的阶段在这里提问来了解更多。

为了回答您的问题,我想指出+ 是正则表达式中的量词,表示前一个字符(或组)的1 倍或更多倍,因此C+ 将匹配至少1 个@987654324 @,意思是C会匹配,CC会匹配,CCC会匹配等等。您使用C+ 进行的搜索实际上只匹配C

C++ 在正则表达式中会给你一个错误,至少在 C# 中是这样。您不会使用其他正则表达式风格,包括 JGsoft、Java 和 PCRE(++ 在这些风格中是 possessive quantifier)。

那么,该怎么办?您需要转义 + 字符,以便您的搜索将查找文字 + 字符。一种简单的方法是在+ 之前添加一个反斜杠:\+。另一种方法是将+ 放在方括号中。

这就是说,你可以使用:

C\+\+

或者……

C[+][+]

寻找C++。现在,由于您有两次相同的字符,您可以使用{n}(其中n 是出现次数)来表示最后一个字符的出现次数,从哪里来:

C\+{2}

或者……

C[+]{2}

应该给出相同的结果。

【讨论】:

  • 感谢 Jerry 的详细解释。这有助于解决我的问题。
【解决方案2】:

加号+是正则表达式中的特殊符号。你必须逃避它。

Regex regex = new Regex(@"C+\+");

【讨论】:

  • 感谢您的回复@Ghost。但是你能告诉我如何克服这个错误吗?它如何让 C+ 通过而不是 C++?
  • @user2604371 C+ 表示一个或多个C 字符(如CCCC)。
  • 谢谢@CamiloMartin。这有帮助。
【解决方案3】:

我不禁注意到@ghost 的回答是错误的。

这个sn-p是错的:

Regex regex = new Regex(@"C+\+");

因为第一个 + 没有转义。所以意思仍然是“一个或多个C字符后跟一个加号”。正确的形式是@"C\+\+"

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-01-20
    • 1970-01-01
    • 1970-01-01
    • 2020-02-24
    • 2021-07-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多