概述
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格式的字符串语法:匹配英文字母总结:所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复