我有以下字符串:
"xxxx_result=0,oper,oper,oper,result=[{field1:1,field1:2,field1:3}]"
我需要找到result=[{field1:1,field1:2,field1:3}]
到目前为止我所做的是这样的:
String s = "xxxx_result=0,oper,oper,oper,result=[{field1:1,field1:2,field1:3}]";
String ps = "result=(.*)";
Pattern p = Pattern.compile(ps);
Matcher m = p.matcher(s);
if (m.find()){
System.out.println(m.group(0));
System.out.println(m.group(1));
}
但它没有成功获得具有JSON值的result
,我怎样才能获得它?
答案 0 :(得分:1)
试试这个正则表达式:
.*(result=\[\{[^}]*\}\])
在java中:
String ps = ".*(result=\\[\\{[^}]*\\}\\])";
String s = "xxxx_result=0,oper,oper,oper,result=[{field1:1,field1:2,field1:3}]";
Pattern p = Pattern.compile(ps);
Matcher m = p.matcher(s);
if (m.find()){
System.out.println(m.group(0)); // returns value of s
System.out.println(m.group(1)); // returns result=[{field1:1,field1:2,field1:3}]
}
检查此处的正则表达式https://regex101.com/r/kT1vP9/1
答案 1 :(得分:0)
快速解决方案:
String ps = "(result=([\\D.*).*)";
答案 2 :(得分:0)
只需将您的模式更改为
即可String ps = ",result=(.*?])";
我添加了,
以确保您获得正确的result
匹配,然后匹配所有内容,包括第一次遇到的]
。
答案 3 :(得分:0)
看看你的例子,你需要的只是一个单词边界:
String ps = "\\bresult=(.*)";
这样可以避免在result=
部分的xxxx_result=0
部分进行匹配。
另一种可能性是使用lookbehind确保逗号出现在result=
之前:
String ps = "(?<=,)result=(.*)";
答案 4 :(得分:0)
假设您想从result=[{field1:1,field1:2,field1:3}]
获取String
:
String s = "xxxx_result=0,oper,oper,oper,result=[{field1:1,field1:2,field1:3}]";
你可以使用寻找result={[
的正则表达式,然后使用}
或]
,尽可能少*?
,然后}]
}。
String ps = "(result=\\[\\{[^\\]\\}]*?\\}\\])";