2013-01-23 176 views
0

我無法找到如何在我正則表達式排除字符串:正則表達式字符串排除

例如:

<div\s[^>]+> 

會發現其收盤前一個<div和每一個字符現在>

我想找到<div...>,然後everything but a </div>,然後找到</div>。例如:

<div\s[^>]+>[^(</div>)]*</div> 

問題是[^abc]不包括a或b或c。我如何排除「abc」字符串?

回答

3

這就是negative lookahead assertions是:

<div\s[^>]+>(?:(?!</div>).)*</div> 

說明:

(?:   # Match... 
(?!</div>) # unless we're right before a </div> 
.   # any character. 
)*   # Repeat as needed 

您可能希望讓斜線可選((?!</?div>));否則你會絆倒在嵌套標籤,如<div> foo <div> bar </div> baz </div>

+0

ü太fast..i勉強鍵入 – slier

+0

哇,我艱難我擅長的正則表達式...謝謝! – Martin

1

使用非貪婪正則表達式的可能

<div\s[^>]+>(.*?)</div> 
+0

你能解釋它爲什麼起作用嗎? (我雖然'?'爲0或1次最後一個字符) – Martin

+0

在非貪婪的表達,。不匹配*全部*如果在模式中找到匹配,它就會停止。 –

+0

好吧,發現它http://en.wikipedia.org/wiki/Regular_expression:'通過使用惰性量詞,表達式首先嚐試最小匹配「 – Martin