2

经过大量研究后,我登陆了SO 社区 wiki,据说在 regex 中查看某些内容是否不匹配的最佳方法是执行以下操作:

^((?!hede).)*$

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

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

它有效,但它似乎给了我两场比赛,一场包含括号,另一场没有括号。有人可以指出我做错了什么。

4

2 回答 2

4

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

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

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

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

这两者是等价的,但后者略显多余。

此外,如果您想匹配一些分隔的内容,通常认为使用否定字符类而不是不贪婪的重复是一种很好的做法:

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

(这应该是等价的)

于 2012-10-28T16:54:21.190 回答
1

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

于 2012-10-28T16:55:29.130 回答