使用正则表达式时解析错误

时间:2013-07-21 14:52:54

标签: c# regex parsing

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

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

  parsing "C++" - Nested quantifier +.

任何人都可以告诉我如何解决此错误吗?

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

3 个答案:

答案 0 :(得分:3)

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

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

答案 1 :(得分:3)

首先,我相信通过查看一些正则表达式教程而不是在当前阶段询问,您将学到更多东西。

要回答您的问题,我想指出+是regexp中的量词,意味着前一个字符(或组)的1倍或更多倍,因此C+将匹配至少1 C,意味着C将匹配,CC将匹配,CCC将匹配,依此类推。您使用C+进行的搜索实际上仅匹配C

正则表达式中的

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

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

这就是说,你可以使用:

C\+\+

或者...

C[+][+]

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

C\+{2}

或者...

C[+]{2}

哪个应该给出相同的结果。

答案 2 :(得分:1)

我忍不住注意到@ ghost的答案是错误的。

此代码段错误:

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

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