让我解释一下我面临的实际问题。
当我的SearchString是C +时,下面正则表达式的设置工作正常。 但是当我的搜索字符串是C ++时,它会引发一个错误陈述 -
parsing "C++" - Nested quantifier +.
任何人都可以告诉我如何解决此错误吗?
RegExp = new Regex(Search_Str.Replace(" ", "|").Trim(), RegexOptions.IgnoreCase);
答案 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\+\+"