2015-03-08 266 views
1

我正在尋找一個RegEx來返回兩個方括號之間的所有字符,只有字符,而不是括號本身。正則表達式返回方括號內的字符(但不包括括號)

例如,給定一個字符串,它看起來像"[A][B2][1,1][ABC]"

正則表達式應該返回:AB21,1ABC

我已經嘗試了兩種String#splitPattern & Match各種表情。

我已經得到的最接近的是:

String.split("[\\[]*[\\]]");Pattern.compile("\\[[^\\]]+(?=])");

這兩個回報:[A[B2[1,1[ABC

我發現返回的其他表達式值與括號括起來(即Pattern.compile("\\[[^\\]]*\\]");),但那不是我所追求的。

有人知道正確的表達方式嗎?或者是我試圖做不到的事情?

回答

1
(?<=\\[).*?(?=\\]) 

你需要lookaheadslookbehinds。或者

(?<=\\[)[^\\]]*(?=\\]) 
+1

你不需要lookarounds。 – hwnd 2015-03-08 19:07:47

+1

很快!我用'Pattern'測試了兩者,並且都與我的測試數據完美配合。 – munyul 2015-03-08 19:08:18

+0

我會,但有一個計時器:p – munyul 2015-03-08 19:09:10

0

您可以使用此。

Pattern.compile("\\[(.*?)\\]"); 
+0

不,我已經嘗試過那一個。它是返回包括括號在內的值的那一個,這不是我所追求的, – munyul 2015-03-08 19:06:21

+0

您需要獲取組(1)而不是組(0)。 – 2015-03-08 19:11:39

1

所有你需要的是一個capturing group來保留你想要的模式的一部分。

String s = "[A][B2][1,1][ABC]"; 
Pattern p = Pattern.compile("\\[([^]]*)]"); 
Matcher m = p.matcher(s); 
while (m.find()) { 
    System.out.println(m.group(1)); 
} 

Ideone Demo

+0

你真的試過這段代碼嗎?我只是跑它,返回的輸出是_with_括號! – munyul 2015-03-08 19:12:48

+0

對不起,你是對的:)但vks有點快。 – munyul 2015-03-08 19:16:24