2013-05-28 220 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/