正则表达式在括号之间获取字符串

时间:2014-10-03 12:36:23

标签: java regex

我只是在学习使用正则表达式,这对我来说似乎有点复杂。

我试图在Java中解析这个String:

new Array(new Array('1','Hello'),new Array('2','World (New) Again'),new Array('3','Now'));

我希望输出结束时匹配:

'1','Hello'
'2','World (New) Again'
'3','Now'

我尝试了一些模式,但我能得到的最好的就是我得到了:

'1','Hello'
'2','World (New
) Again'
'3','Now'

这是我的代码:

Pattern pattern2 = Pattern.compile("([^\\(]*[']*['][^\\)]*[']*)");
s = "new Array(new Array('1','Hello'),new Array('2','World (New) Again'),new Array('3','Now'));";
Matcher matcher = pattern2.matcher(s);

while(matcher.find()){
    String match = matcher.group(1);
    System.out.println(match); 
}

2 个答案:

答案 0 :(得分:1)

如果json字符串格式与上面类似,则以下代码将起作用。

String s = "new Array(new Array('1','Hello'),new Array('2','World (New) Again'),new Array('3','Now'));";
Pattern regex = Pattern.compile("[(,]new\\sArray\\(((?:(?!\\),new\\sArray|\\)+;).)*)\\)");
 Matcher matcher = regex.matcher(s);
 while(matcher.find()){
        System.out.println(matcher.group(1));
 }

<强>输出:

'1','Hello'
'2','World (New) Again'
'3','Now'

DEMO

答案 1 :(得分:0)

您需要拆分以确保关闭/打开对之间没有紧密的括号:

你可以用一行完成整个事情:

String[] parts = str.replaceAll("^(new Array\\()*|\\)*;$", "").split("\\)[^)]*?Array\\(");

一些测试代码:

String str = "new Array(new Array('1','Hello'),new Array('2','World (New) Again'),new Array('3','Now'));";
String[] parts = str.replaceAll("^(new Array\\()*|\\)*;$", "").split("\\)[^)]*?Array\\(");
for (String part : parts)
    System.out.println(part);

输出:

'1','Hello'
'2','World (New) Again'
'3','Now'