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