2013-12-17 26 views
0

我有這樣的文字:如何對嵌套標籤進行replaceAll並識別嵌套狀態?

${{stuff${{more stuff}}}} 

我想這一點:

data(stuff+data(more stuff)) 

不是這個:

data(stuffdata(more stuff)) 

我的代碼:

int flags = Pattern.CASE_INSENSITIVE | Pattern.DOTALL; 

Pattern dataPattern = Pattern.compile("\\$\\{\\{(?<DATA>.*?)\\}\\}", flags); 
Matcher dataMatcher = dataPattern.matcher(""); 


String raw = "${{stuff${{more stuff}}}}"; 
dataMatcher.reset(raw); 

String result = dataMatcher.replaceAll("data($1)"); 

那麼......識別嵌套的sta tus並加上加號?

+4

如果那是什麼嵌套3級深?什麼6級?正則表達式是不是遞歸解析語言,不適合對這個問題的一般情況。您將不得不爲這個語法寫一個真正的(簡單的)解析器。 –

+0

我建議你將「數據」替換爲兩個。一個替換爲「+數據」。 – oyss

+0

否則,用'+ data'替換全部,並刪除第一個'+'字符;) – sp00m

回答

1

出乎我的初步意見(這仍然適用於一般情況下),我相信你的語法其實是很簡單的問題可以用簡單的替換來解決:

${{  -->  +data(
}}  --> ) 

然後,你已經建立後了最終的字符串,丟棄的第一個字符(即finalResult.substring(1)

+1

好的!爲什麼使用電動工具時,錘子和釘子會工作:) –