我是靠谱客的博主 心灵美季节,这篇文章主要介绍​​​​​​​Java 正则表达式 匹配json格式的字符串语法:匹配英文字母总结:,现在分享给大家,希望可以做个参考。

Java 正则表达式 匹配json格式的字符串

目录

语法:

匹配英文字母

要求:

使用.*:

修改:

疑问:

总结:


在处理中,需要替换es查询语句的条件,要匹配json数据格式的字符串

 

Json数据格式:  {"flow_name":"paramName"}

变成字符串后: "{"flow_name":"paramName"}"

注意: 处理的时候,注意双引号的处理

 

语法:

[abc]   表示字母abc中的任意一个

 

数量控制符

贪婪型

?     表示1个或0个。换句话说,表示要不然没有,要不然只有1个

*     表示0个或多个。

+     表示1个或多个。

{n}   表示正好n个

{n,m} 表示n到m个,这是一个左闭右闭区间

{n,}  表示至少n个

 

 

匹配英文字母

要求:

如何把

{"bool":{"must":[{"match":{"flow_name":"paramName"}}],"must_not":[{"term":{"reasonCode":157}}]}}

转换为:

 匹配字符串里面:{"flow_name":"paramName"}   {"reasonCode":157}

 

使用.*:

复制代码
1
2
 Json中 key-value中,value的值可能没有双引用  pattern =  "\{"([a-zA-Z_]+)":(.+)}";
复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
public static void main(String[] args) { String content = "{"bool":{"must":[{"match":{"flowname":"$param.paramName"}}],"must_not":[{"term":{"reasonCode":"157"}}]}}"; String pattern = "\{"([a-zA-Z_]+)":(.+)}"; matchJson(content, pattern); } public static void matchJson(String content, String pattern) { Pattern p = Pattern.compile(pattern); Matcher m = p.matcher(content); while (m.find()) { String group = m.group(); System.out.println("group: "+group); System.out.println("group1: "+m.group(1)); System.out.println("group2: "+m.group(2)); } }

 

 

部分结果:

复制代码
1
2
3
4
group: {"bool":{"must":[{"match":{"flowname":"$param.paramName"}}],"must_not":[{"term":{"reasonCode":"157"}}]}} group1: bool group2: {"must":[{"match":{"flowname":"$param.paramName"}}],"must_not":[{"term":{"reasonCode":"157"}}]}

如果使用(.*)会变成全匹配,不符合要求,还是要改成具体的详细的内容

 

修改:

pattern =  "\{"([a-zA-Z_]*)":"([a-zA-Z0-9._$]*)"}";

复制代码
1
2
3
4
5
6
public static void main(String[] args) {     String  content = "{"bool":{"must":[{"match":{"flowname":"$param.paramName"}}],"must_not":[{"term":{"reasonCode":"157"}}]}}";     String  pattern =  "\{"([a-zA-Z_]+)":(.+)}";     pattern =  "\{"([a-zA-Z_]*)":"([a-zA-Z0-9._$]*)"}";     matchJson(content, pattern); }

结果:

复制代码
1
2
3
4
5
6
7
group: {"flowname":"$param.paramName"} group1: flowname group2: $param.paramName group: {"reasonCode":"157"} group1: reasonCode group2: 157

 

疑问:

String content = "{"bool":{"must":[{"match":{"flow_name":"paramName"}}],"must_not":[{"term":{"reasonCode":157}}]}}";
如果字符串中,{"reasonCode":157} 这时候该如何处理呢?如何更通用些?

把双引号,放到匹配里面

pattern =  "\{"([a-zA-Z_]*)":([a-zA-Z0-9._$""]*)}";

结果:

复制代码
1
2
3
4
5
6
7
group: {"flowname":"$param.paramName"} group1: flowname group2: "$param.paramName" group: {"reasonCode":157} group1: reasonCode group2: 157

    这样可以匹配到内容,但是带双引号的内容,匹配到的时候也带有了双引号,入:"$param.paramName",处理匹配的时候,要特殊处理,不算好,目前也没有想到好的方式去处理。具体根据实际情况去优化处理吧。

总结:

     匹配json格式字符串的时候,特别注意双引号的处理,其它根据实际情况去写pattern,有耐心,先从简单的开始匹配,比如先写匹配key,然后写匹配value,再组合写匹配key-value,这样更能发现问题。

 

最后

以上就是心灵美季节最近收集整理的关于​​​​​​​Java 正则表达式 匹配json格式的字符串语法:匹配英文字母总结:的全部内容,更多相关​​​​​​​Java内容请搜索靠谱客的其他文章。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(63)

评论列表共有 0 条评论

立即
投稿
返回
顶部