正则表达式返回方括号(但不是括号)之间的字符

时间:2015-03-08 19:00:29

标签: java regex

我正在寻找一个RegEx来返回两个方括号之间的所有字符,只返回字符,而不是括号本身。

例如,给定一个类似于"[A][B2][1,1][ABC]"

的字符串

RegEx应该返回:AB21,1ABC

我为String#splitPattern&尝试了各种表达方式。 Match

我最接近的是:

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

这两个都返回:[A[B2[1,1[ABC

我发现其他表达式使用括​​号括起来返回值(即Pattern.compile("\\[[^\\]]*\\]");),但这不是我所追求的。

有人知道正确的表达吗?或者我正在努力做不到的事?

3 个答案:

答案 0 :(得分:2)

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

您需要lookaheadslookbehinds。或

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

答案 1 :(得分: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

答案 2 :(得分:0)

你可以使用它。

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