.net - 逆正则表达式匹配

标签 .net regex

经过大量研究后,我找到了 SO community wiki据说,查看正则表达式中是否有不匹配的内容的最佳方法是执行以下操作:

^((?!hede).)*$

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

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

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

最佳答案

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

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

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

使括号不捕获
\((?:(?!fe|Fe).+?)\)

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

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

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

(这应该是等效的)

关于.net - 逆正则表达式匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13110897/

相关文章:

.net - 使用 P/Invoke 时设置 StringBuilder.Capacity 的正确方法是什么?

.net - 使用 Entity Framework 的导航属性的有意义的名称

javascript - 正则表达式:否定集中只有单个字符实例

python - 去除字符串中的逗号,用逗号和双引号包围/Python

javascript - 输入文本框的正则表达式

c# - .Net 文件模式拾取不需要的文件 (C#)

c# - 项目 'ClassLibrary1.csproj' 目标 'netstandard2.1' 。它不能被以 '.NETFramework,Version=v4.8' 为目标的项目引用

.net - .NET 基本类型有什么特别之处?

javascript - IP地址列表的正则表达式

java - 分号分隔的字母数字