任何人都可以告诉我如何使用正则表达式来否定字符串吗?我想找到所有以开头public class
然后any thing except first,second
最后是其他任何内容的行。
例如,在我希望看到的结果中,public class base
但没有public class myfirst:base
任何人可以帮助我吗?
任何人都可以告诉我如何使用正则表达式来否定字符串吗?我想找到所有以开头public class
然后any thing except first,second
最后是其他任何内容的行。
例如,在我希望看到的结果中,public class base
但没有public class myfirst:base
任何人可以帮助我吗?
使用负前瞻:
public\s+class\s+(?!first|second).+
如果 Peter 是正确的并且您正在使用 Visual Studio 的Find
功能,则应该可以:
^:b*public:b+class:b+~(first|second):i.*$
:b
匹配空格或制表符
~(...)
是 VS 如何进行负前瞻
:i
匹配 C/C++ 标识符
其余的是标准正则表达式语法:
^
对于
$
行首
.
对于任何字符
*
对于零个或多个
+
对于一个或多个
|
对于交替
其他两个答案都很接近,但可能由于不同的原因而失败。
public\s+class\s+(?:(?!first|second).)+
注意负前瞻周围有一个(非捕获)组,以确保它不仅仅适用于第一个位置。
并且该组的限制较少 - 因为.
不包括换行符,所以它使用 that 而不是\S
,并且$
不是必需的 - 这将排除指定的单词并匹配其他单词。
没有斜杠包裹表达式,因为这些不是所有内容都需要的,并且可能会使仅遇到基于字符串的正则表达式使用的人感到困惑。
如果仍然失败,请发布错误匹配或遗漏的确切内容,以及您使用的语言/IDE。
更新:
原来你正在使用 Visual Studio,它有自己的特殊正则表达式实现,出于某种深不可测的原因。所以,你会想试试这个:
public:b+class:b+~(first|second)+$
我无法测试 - 如果它不起作用,请尝试删除$
,否则您将不得不找到一个 VS 用户。或者更好的是,负责这个愚蠢的非标准正则表达式的 VS 工程师。
这是应该为您工作的东西
/public\sclass\s(?:[^fs\s]+|(?!first|second)\S)+(?=\s|$)/
第二个外观,头部可以更改为 $(end of line) 或适用于您的特定用例的另一个锚点,例如“{”
编辑:尝试将最后一部分更改为:
(?=\s|$)