2016-02-20 61 views
0

是否有可能以不同的分隔符,而在返回數組保持分隔符到位拆分文本。如何在不同的分隔符之間分割文本,同時保持Java中的分隔符?

在舉例來說,如果我有包括文本: sin({$=i$}^2

,我想將它拆分數組中,看起來像這樣:

['sin(' , '{$=i$}', '^2']

,而我的分隔符是{}。我設法實現的是一個數組,看起來像這樣:['sin(' , '{$=i$', '}^2']

,但我不能在正確的地方,最後一個分隔符}與這段代碼:根據您的例子

String text = "sin({$=i$}^2"; 
String[] splitted = text.split("(?=[{}])"); 
+0

你如何定義「在正確的地方」? –

+1

匹配['({[^ {}] *} | [^ {}] +)'](https://regex101.com/r/wN2hL8/1) – Tushar

+0

我想定界符從文本的兩個側包裹,比如'{$ = i $}'或'{$ FOR 0 1 1 $}',這樣最後一個分隔符'}'就在那個文本的末尾。 @FrankPuffer – str1k3r

回答

1

它看起來你可能會尋找

split("(?<=\\})|(?=\\{)") 

我們正在使用look-around機制

  • (?<=\\})分裂在地方具有}之前它(這意味着}後分裂)
  • (?=\\{)分裂在地方具有後{(這意味着{前分割)

但是誠實split或甚至regex可能不是您正在查找的工具。嘗試考慮構建自己的分析器/狀態機。

+0

作爲一個側面說明,不相關的問題是,關於java:這個說法不necessarilly所有正則表達式實現支持。例如,javascript不支持look-behind –

相關問題