2010-08-31 165 views
2

我想匹配的字符串看起來是這樣的:貪婪正則表達式匹配

<$Fexample text in here>> 

這個表達式:

<\$F(.+?)>{2} 

然而,也有一些情況下,我的反向引用的內容包括「>」,因此這樣的事情:

<$Fexample text in here <em>>> 

只在反向引用匹配example text in here <em。我需要做些什麼纔能有條件地返回有或沒有這些html實體的正確backrefernce?

回答

5

您可以在正則表達式添加開始和結束錨爲:

^<\$F(.+?)>{2}$ 
+0

是的,你是35秒加快+1投票 – Bart 2010-08-31 06:24:22

+0

我不知道你是否可以從這個問題中得到這個結果,否則就丟掉?就足夠了 – CurtainDog 2010-08-31 06:37:24

+0

我忘記提到錨的缺席是故意的。該字符串可能出現在該行的任何位置。 – 2010-08-31 09:52:11

3

嘗試

<\$F(.+?)>>(?!>) 

(?!>)力量只有最後>>>>>..>>>長序列將被匹配。


編輯:

<\$F(.+?>*)>> 

也有效。

+0

如果你想知道,這是負面的前瞻。請參閱:[Lookaround](http://www.regular-expressions.info/lookaround.html) – NullUserException 2010-08-31 06:24:24

+0

+1:但我認爲<\$F(.+?)>> +會更高效,因爲沒有回溯。 – CurtainDog 2010-08-31 06:35:21

+0

@簾:但那麼多餘的'>'不會在捕捉組中。 – kennytm 2010-08-31 06:38:49

0

請注意,不是恩真正做什麼(我覺得)你想幹什麼,你將不得不解釋合式支架表達式,這在一般語言中是不可能的。

換句話說,<$Fexample <tag <tag <tag>>> example>> oh this should not happen>將返回example <tag <tag <tag>>> example>> oh this should not happen作爲捕獲組。