2013-02-07 53 views
0

我有一個這樣的字符串:如何逃避java正則表達式中的brakets?

[1359873374000,281197568],[1360044062000,1206052864],[1360068648000,991623168]

我怎樣才能像提取與[1359873374000,281197568]正則表達式的每個項目?

我寫了這個代碼,但它不工作:

String[] parts = mainstr.split("\\[[0-9],[0-9]\\]"); 
+1

你試圖解析JSON?有Java庫可以做到這一點。 –

回答

2

你應該分裂

(?<=\\]),(?=\\[) 
+0

謝謝!它的作品:) – moallemi

2

您正則表達式匹配[1,2]。你必須增加一個乘數:

"\\[[0-9]+,[0-9]+\\]" 

編輯: 我不認爲split()會做你想要什麼。看看Matcher Class

解決方案與匹配器類:

import java.util.regex.Matcher; 
import java.util.regex.Pattern; 

String sourceString = "[1359873374000,281197568],[1360044062000,1206052864],[1360068648000,991623168]"; 

Pattern pattern = Pattern.compile("\\[[0-9]+,[0-9]+\\]"); 
Matcher matcher = pattern.matcher(sourceString); 

while (matcher.find()) { 
    System.out.print("Start index: " + matcher.start()); 
    System.out.print(" End index: " + matcher.end() + " "); 
    System.out.println(matcher.group()); 
} 

這會給你的數字對每一次出現。如果你想單獨使用數字,你可以像這樣捕獲它們:"\\[([0-9]+),([0-9]+)\\]"。你將不得不擴展這個例子。

+0

這是行不通的,我只會得到逗號 – NickJ

+0

,除了'',' – Anirudha

+0

正如我所說的,'split()'可能是該任務的錯誤函數。 –

-1

你可能想拆就「],[」,而不是要搜索的整個格局。試試這個:

String[] parts = mainstr.split("\\\\],\\\\["); // Never sure when to use double or quadruple slashes. 

之後,您可能需要替換括號。

+0

會吃''''''''' – Anirudha

1

[0-9]恰好匹配一個數字。如果您想匹配數字序列,請使用[0-9]*。如果您想匹配非空的數字序列,請使用[0-9]+。在你的情況下,你可能需要做"\\[[0-9]+,[0-9]+\\]",或者,這是相同的,"\\[\\d+,\\d+\\]",因爲\d在Java正則表達式中表示「數字」。

0

這是不完美的,因爲它失去了一些支架的,但至少數字是完整和正確歸類:

String[] parts = mainstr.split("\\D,\\D"); 
相關問題