Java正则表达式提取方括号内的内容

36

以下是输入行

Item(s): [item1.test],[item2.qa],[item3.production]

您能帮我编写一个Java正则表达式来提取数据吗?

item1.test,item2.qa,item3.production

从上面的输入行开始?

3个回答

94

更加简洁一点:

String in = "Item(s): [item1.test],[item2.qa],[item3.production]";

Pattern p = Pattern.compile("\\[(.*?)\\]");
Matcher m = p.matcher(in);

while(m.find()) {
    System.out.println(m.group(1));
}

2
你能解释一下这个模式的含义吗?谢谢。 - MIKEC

9

您应该使用正向预查和反向预查:

(?<=\[)([^\]]+)(?=\])
  • (?<=[) 匹配左括号之后的所有内容
  • ([^]]+) 匹配不包含右括号的任意字符串
  • (?=]) 匹配右括号之前的所有内容

(注:以上为IT技术相关内容,涉及正则表达式语法解释)

太棒了,但我如何得到相反的结果?我只想保留方括号内的内容。 - candlejack
我不明白你的问题 - 这正是这个正则表达式所做的事情。 以输入 Item(s): [item1.test],[item2.qa],[item3.production] 它返回 item1.test item2.qa item3.production - gnom1gnom

2
我会在去除前导或尾随垃圾后进行分割:
String s = "Item(s): [item1.test], [item2.qa],[item3.production] ";
String r1 = "(^.*?\\[|\\]\\s*$)", r2 = "\\]\\s*,\\s*\\[";
String[] ss = s.replaceAll(r1,"").split(r2);
System.out.println(Arrays.asList(ss));
// [item1.test, item2.qa, item3.production]

@Stephan Kristyn:在我这里,在Mac OS X 10.6.7上的Java 1.6上运行良好。 - maerics
这很完美,它避免了堆栈溢出错误,即使是对于长字符串(其他解决方案失败的情况下)。 - Ram Manohar

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接