2013-10-20 46 views
0

我需要${} 實例之間的匹配文本:匹配文本與支架之間可能的括號

${我需要匹配本文}

簡單的regex \$\\{(.+?)\\}將正常工作,直到我把一些}文字內部

大括號在文本內部配對以匹配。

有沒有可能通過正則表達式來解決這個問題?

+0

內部}如何在輸入中被轉義? – Basilevs

+0

沒有關於輸入的更多信息是不可能的。例如,所有內部大括號可以被轉義或成對出現{}。 – Basilevs

+0

他們沒有逃脫,但每個{有一對} – chaplean

回答

0
\$\{((?:\{[^\{\}]*\}|[^\{\}]*)*)\} 

要是碰到一個開括號,我們來看看它的對,並關閉一個後我們繼續像往常一樣。這不能處理多個級別的嵌套括號。

這裏的主要構建塊在[^\{\}]* - 任何非括號序列。它可以被支架\{[^\{\}]*\}包圍,但它可能不是(?:\{[^\{\}]*\}|[^\{\}]*)。任何這些序列的計數都可以存在,因此最後是*

任何級別的嵌套可能需要recursive regex,Java不支持。但是任何固定金額都可以通過仔細擴展這個想法來匹配。

+0

正是!這樣可行。謝謝! – chaplean

0

在ReGex的末尾添加$並且不要轉義。美元符號意味着它將在最後檢查前面的字母或符號。

正則表達式:\${(.+?)}$

的Java格式化:\\${(.+?)}$

+0

輸入可能會在}之後繼續。 – Basilevs

+0

@Basilevs我在印象之下,他只想要在$ {} – allejo

+0

謝謝你allejo之間的東西,但是,這可能不是輸入的結尾...... – chaplean