2015-03-08 208 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