在开发中遇到需要替换JSON字符串某个key对应的双引号字符串,最后选择使用正则表达式来解决,接下来看看如何解决?
需求
有JSON字符串:{"code":"kokf","params":"{\"branchCode\":\"yNeWWnKb\",\"vendorCode\":\"zvuXEixA\"}","timestamp":"1499092515370"}
,需要匹配到params对应的值(包括引号),即:**”{"branchCode":"yNeWWsMnKb","vendorCode":"zvuXEiqtxA"}”**
解决
Java代码:
1 | Pattern paramsRegex = Pattern.compile("(\"params\"\\s*:\\s*)((?<!\\\\)\".*?(?<!\\\\)\")"); |
注意:在Java正则表达式中的反斜杠标识表示为\\,而在字符串中\必须使用\\来表示,所以最后正则表达式的字符串为”\\\"
延伸
断言类型 | 表达式 | 说明 |
---|---|---|
零宽度负回顾后发断言 | (?<!exp) | 匹配前面不是exp的位置 |
零宽度负预测先行断言 | (?!exp) | 匹配后面跟的不是exp的位置 |
零宽度正预测先行断言 | (?=exp) | 匹配exp前面的位置 |
零宽度正回顾后发断言 | (?<=exp) | 匹配exp后面的位置 |
这里使用的是零宽度负回顾后发断言,(?<!\\)"
匹配双引号『”』但是双引号『”』前面不是\