2017-03-27 62 views
2

我試圖寫在Java中的Regex用於提取雙大括號如何提取多張花括號之間的元素

之間的所有元素

例子:

I am very much new to java...{{envelope|func"{{aa}}{{ds}}|{{abc.xyz}}"}} and i want to know.... more. 

我想這正則表達式,但它不」 T迴流全

{\{(.*?)(?:\{\{(.*?)\}\})*\}\} 

我想提取如下面的第一個元素:

  • 信封| FUNC 「{{AA}} {{} DS} | {{abc.xyz}}」
  • AA
  • DS
  • abc.xyz
+8

我通常提醒:有時候有些人來決定,如果一個正則表達式是一個很好的解決方案;或者如果更好的寫一點自己的解析邏輯。通常:當我需要其他人爲我創建該正則表達式時,我傾向於不使用正則表達式。因爲我將來可能很難保持那些我不能寫下來的東西。除此之外:我甚至不確定您是否可以爲任意深度大括號嵌套編寫正則表達式。 – GhostCat

+2

僅供參考:Java正則表達式引擎不支持遞歸,您不能使用正則表達式來匹配嵌套平衡子串。你需要編寫你自己的解析代碼。 –

+0

@ Jason4Ever:[這是否適用於您?](https://regex101.com/r/JpiHYi/3) – anubhava

回答

1

轉換我的留言一個答案。這是假設在{{}}之間我們有所有非空白字符。

這個正則表達式基於lookahead和lookahead內的替換。被捕獲的組是前瞻本身的一部分。

\{\{(?=((?:(?!\{\{|}})\S)*+|\S*)}}) 

或者在Java中:

final String regex = "\\{\\{(?=((?:(?!\\{\\{|\\}})\\S)*+|\\S*)\\}})"; 

RegEx Demo

相關問題