2

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

4

3 回答 3

3

描述

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

在此处输入图像描述

这将搜索要查找的字符串test,如果字符串中存在,则测试将失败。另请参阅示例

概括

  • ^匹配字符串的开头
  • (?! 往前看是否有:
  • .*? 除 \n 以外的任何字符(0 次或多次(匹配尽可能少的数量))
  • \b 单词 char (\w) 和非单词 char 之间的边界
  • test 匹配test
  • \b 单词 char (\w) 和非单词 char 之间的边界
  • ) 前瞻结束
于 2013-05-28T14:11:16.690 回答
2

你只是把点放在了错误的地方。您需要在使用下一个字符之前进行前瞻,而不是之后:

^(?:(?!expression).)*$

此外,如果字符串中可以有行分隔符,则需要指定多行/DOTALL 模式。你如何做到这一点取决于你使用的正则表达式风格。一些例子:

(?s)^(?:(?!expression).)*$

/^(?:(?!expression).)*$/s

^(?:(?!expression)[\s\S])*$

或者你可以使用Denomales 的解决方案,它更容易理解。

于 2013-05-28T14:47:47.430 回答
0

我发现这个表达式对我有用:

^.*(?=expression)

whereexpression表示与我要排除的模式匹配的正则表达式。我推荐这个工具进行测试 - http://gskinner.com/RegExr/

于 2013-05-28T15:47:46.777 回答