我只是在学习使用正则表达式,这对我来说似乎有点复杂。
我试图在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);
}
答案 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'
答案 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'