2013-10-11 59 views
1

我有一個字符串:"stuffhere{@ name="productViewer" vars="productId={{id}}"}morestuff"Java的正則表達式查找全部之間,而是最後一個字符不是之前或之後

我如何才能找到開始{和最後}之間的一切。

Pattern.compile("\\{@(.*?)\\}" + from, Pattern.DOTALL); //Finds {@ name="productViewer" vars="productId={{id} 

我如何驗證結束}沒有被其他}之前或之後?該字符串也可能被其他字符包圍。

標識像正則表達式只返回:name="productViewer" vars="productId={{id}}"

+0

擺脫不情願的量詞。 Make是'。*' –

回答

4

您可以使用此模式:

\\{@(.*)(?<!\\})\\} 

(?<!..)是負回顧後,檢查你的條件(不}開頭)

請注意,大括號不需要轉義,您可以編寫:

\\{@(.*)(?<!})} 
+0

Works。我曾嘗試使用lookaheads/behinds,但是我把它們定位錯了。 – ryandlf

+0

神聖的耶穌。爲什麼這些不必要的環視? ''*貪婪會自動消耗最後一個'}'的東西。 –

+0

不知道爲什麼,但只是刪除不情願的量詞沒有爲我工作... @RohitJain – ryandlf

0

試試這個:

^[^{]*\\{@(.*?)\\}[^}]*$ 
0

我已經怎麼樣

(?<=[{])[^{}]+ 

從未使用過java的,但正則表達式是國際是不是:)

編輯:

等待...正則表達式有錯誤...

0

試試這個:

String s = "stuffhere{@ name=\"productViewer\" vars=\"productId={{id}}\"}morestuff"; 
    Pattern p = Pattern.compile("\\{@\\s+(.*)\\}"); 
    Matcher m = p.matcher(s); 
    if(m.find()){ 
     System.out.println(m.group(1)); 
    } 
相關問題