让我解释一下我面临的实际问题。
当我的 SearchString 是 C+ 时,下面的正则表达式设置工作正常。但是,当我的搜索字符串是 C++ 时,它会抛出一个错误,说明 -
parsing "C++" - Nested quantifier +.
谁能让我知道如何克服这个错误?
RegExp = new Regex(Search_Str.Replace(" ", "|").Trim(), RegexOptions.IgnoreCase);
首先,我相信您会通过查看一些正则表达式教程而不是在您当前阶段在这里询问来了解更多。
为了回答你的问题,我想指出它+
是正则表达式中的量词,表示前一个字符(或组)的 1 倍或更多倍,因此C+
至少匹配 1 C
,意思是C
匹配,CC
将匹配,CCC
将匹配和很快。您的搜索C+
实际上只匹配C
!
C++
在正则表达式中会给你一个错误,至少在 C# 中。您不会使用其他正则表达式风格,包括 JGsoft、Java 和 PCRE(在这些风格中++
是所有格量词)。
那么该怎么办?您需要对+
字符进行转义,以便您的搜索将查找文字+
字符。+
一种简单的方法是在:之前添加反斜杠\+
。另一种方法是将 放在+
方括号中。
这就是说,您可以使用:
C\+\+
或者...
C[+][+]
寻找C++
. 现在,由于您有两次相同的字符,您可以使用{n}
(其中n
是出现次数)来表示最后一个字符的出现次数,因此:
C\+{2}
或者...
C[+]{2}
哪个应该给出相同的结果。
加号+
是正则表达式中的特殊符号。你必须逃避它。
Regex regex = new Regex(@"C+\+");
我忍不住注意到@ghost 的回答是错误的。
这个片段是错误的:
Regex regex = new Regex(@"C+\+");
因为第一个 + 没有被转义。所以意思仍然是“一个或多个C
字符后跟一个加号”。正确的形式是@"C\+\+"