正则表达式:排除

时间:2013-05-28 14:01:01

标签: regex

我想从多行文本字段中排除特定模式。我有一个捕获该模式的正则表达式,所以现在我想创建一个匹配除此模式之外的所有内容的表达式。对此有什么一般性的解释?出于某种原因,这样的负面预测:^(.(?!expression))*$对我不起作用。

3 个答案:

答案 0 :(得分:3)

描述

^(?!.*?\btest\b)

enter image description here

这将搜索查找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/