2011-11-17 31 views
2

我有這樣的正則表達式怪誕與正則表達式

"(?<=L).+?(?=;)" 

這是爲了配合L和東西之間;

我使用它本文

"(Ljava/net/URL;)Ljava/lang/String;" 

,我得到的匹配,而

"java/net/URL" 
";)Ljava/lang/String" 

回答

2

預期結果。第二場比賽開始於「URL」中的「L」。由於您使用的是lookarounds,因此匹配不會「消耗」L;。你可能想要做這樣的事情,而不是:

"L(.+?);" 

所以你想要的比賽是在第一子模式和L;將不能用於以後匹配。

+0

哈,我沒有注意到URL中的L. –

+0

不應該'。+?'部分消耗掉L,所以它不能用於第二場比賽的倒車。 – AndreKR

+0

@AndreKR是的,這場比賽包括'L',但它並沒有使用'L'和';'作爲分隔符。這個問題是由後視造成的。比賽以'L'結束,所以它開始在';'處尋找下一場比賽。 (我們實際上應該開始尋找下一個匹配_after_'''分隔符)。首先,它檢查在該點之前是否存在「L」,即使我們不想計算那個點。 – Wiseguy