我想从多行文本字段中排除特定模式。我有一个捕获该模式的正则表达式,所以现在我想创建一个匹配除此模式之外的所有内容的表达式。对此有什么一般性的解释?出于某种原因,这样的负面预测:^(.(?!expression))*$
对我不起作用。
答案 0 :(得分:3)
^(?!.*?\btest\b)
这将搜索查找test
的字符串,如果字符串中存在,则测试将失败。 See also sample
^
匹配字符串的开头(?!
展望未来:.*?
除\ n之外的任何字符(0次或更多次
(匹配尽可能少的数量))\b
单词char(\ w)之间的边界
还有一些不是单词char的东西test
匹配test
\b
单词char(\ w)之间的边界
还有一些不是单词char的东西)
结束前瞻答案 1 :(得分:2)
你只是把点放在错误的地方。您需要在消耗下一个字符之前执行前瞻,而不是在:
之后^(?:(?!expression).)*$
此外,如果字符串中可以有行分隔符,则需要指定多行/ DOTALL模式。你如何做到这取决于你正在使用的正则表达式风格。一些例子:
(?s)^(?:(?!expression).)*$
/^(?:(?!expression).)*$/s
^(?:(?!expression)[\s\S])*$
或者你可以使用Denomales' solution,这更容易理解。
答案 2 :(得分:0)
我发现这个表达对我有用:
^.*(?=expression)
其中expression
表示与我想要排除的模式匹配的正则表达式。
我建议使用此工具进行测试 - http://gskinner.com/RegExr/