逆正则表达式匹配

时间:2012-10-28 16:51:52

标签: .net regex

在做了大量的研究之后,我登陆SO community wiki,据说在正则表达式中查看某些内容是否匹配的最佳方法是执行以下操作:

^((?!hede).)*$

因此,以此为例,我尝试匹配括号中不以字母fe或Fe开头的任何内容。我想出了这个:

\(((?!fe|Fe).+?)\)

它有效,但它似乎给了我两个匹配,一个包含括号,一个没有它们。有人可以指出我做错了什么。

2 个答案:

答案 0 :(得分:4)

它不会给你两场比赛。它只是为您提供第一个捕获组的完全匹配。只需删除外部未转义的括号,第二个“匹配”应该消失:

\((?!fe|Fe).+?\)

如果您稍后需要这些括号,但仍然不需要它将生成的捕获子字符串,您也可以使用?:使用括号不捕获:

\((?:(?!fe|Fe).+?)\)

这两个是等价的,但后者有点多余。

此外,如果您想匹配某些分隔内容,通常认为使用负面字符类而不是不重复重复是一种好习惯:

\((?!fe|Fe)[^)]+\)

(这应该是等同的)

答案 1 :(得分:1)

您可以通过在第一个方括号中添加“?:”来删除捕获组。