我是靠谱客的博主 心灵美季节,最近开发中收集的这篇文章主要介绍​​​​​​​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}

 

使用.*:

 Json中 key-value中,value的值可能没有双引用
 pattern =  "\{"([a-zA-Z_]+)":(.+)}";
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));
}
}

 

 

部分结果:

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._$]*)"}";

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);
}

结果:

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._$""]*)}";

结果:

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 正则表达式 匹配json格式的字符串语法:匹配英文字母总结:所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

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

评论列表共有 0 条评论

立即
投稿
返回
顶部