2013-05-28 168 views
2

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

+0

你能提供一些示例输入吗? –

+1

你知道它会匹配一切,但确切的模式?所以,如果你想在“森林中的树”这个句子中匹配单词树,它将会有许多不同的选项可以匹配,但只有树的精确匹配会失败。所以它更加有效,取决于你的目标,匹配积极的并且在比赛时丢弃它。 – B8vrede

+2

您可能在这里使用了错误的方法。如果通过排除,你的意思是你想过滤出来,我建议使用你的模式与查找/替换功能,只需用空字符串替换。 – FatalError

回答

3

说明

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

enter image description here

这将搜索寻找test的字符串,如果存在的字符串,然后会导致测试失败。 See also sample

摘要

  • ^匹配字符串
  • (?!向前看的开始,看看有没有:
  • .*?除了\ n(0次或更多次 任何字符(匹配尽可能少的数量))
  • \b char(\ w) 和东西是不是一个字字符
  • test比赛test
  • \b一个字字符(\ w)的 和东西之间的界限不是一个字字符
  • )先行结束
+0

现在好多了! – Jerry

+0

奇怪...好吧,我更新了这个,所以它会在rubular上工作,并且包含一个示例链接 –

2

你只是在错误的地方点。您需要之前做先行你消耗下一个字符,而不是之后:

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

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

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

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

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

或者您可以使用Denomales' solution,这有点容易理解。

0

我发现这个表达式为我工作:

^.*(?=expression) 

其中expression表示正则表达式匹配我想排除的格局。 我推荐这个工具进行测试 - http://gskinner.com/RegExr/