正则表达式 - 需要找到精确模式的内容及其周围

时间:2015-08-20 07:42:47

标签: java regex

我有以下字符串:

"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,我怎样才能获得它?

5 个答案:

答案 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=\\[\\{[^\\]\\}]*?\\}\\])";