经过大量研究后,我登陆了SO 社区 wiki,据说在 regex 中查看某些内容是否不匹配的最佳方法是执行以下操作:
^((?!hede).)*$
因此,以此为例,我试图匹配括号中不以字母 fe 或 Fe 开头的任何内容。我想出了这个:
\(((?!fe|Fe).+?)\)
它有效,但它似乎给了我两场比赛,一场包含括号,另一场没有括号。有人可以指出我做错了什么。
经过大量研究后,我登陆了SO 社区 wiki,据说在 regex 中查看某些内容是否不匹配的最佳方法是执行以下操作:
^((?!hede).)*$
因此,以此为例,我试图匹配括号中不以字母 fe 或 Fe 开头的任何内容。我想出了这个:
\(((?!fe|Fe).+?)\)
它有效,但它似乎给了我两场比赛,一场包含括号,另一场没有括号。有人可以指出我做错了什么。
它不会给你两场比赛。它只是为您提供第一个捕获组的完整匹配。只需删除外部一对未转义的括号,第二个“匹配”就会消失:
\((?!fe|Fe).+?\)
如果您稍后需要这些括号,但仍然不需要它会生成的捕获的子字符串,您也可以使用以下方法使括号不被捕获?:
:
\((?:(?!fe|Fe).+?)\)
这两者是等价的,但后者略显多余。
此外,如果您想匹配一些分隔的内容,通常认为使用否定字符类而不是不贪婪的重复是一种很好的做法:
\((?!fe|Fe)[^)]+\)
(这应该是等价的)
您可以通过在第一个括号中添加“?:”来删除捕获组。