使用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时出现分析错误

首先,我相信您将通过查看一些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'+'+"