如何编写正则表达式匹配引号内含pat的字段并完成替换
正则匹配替换问题排查与解决
原有正则的问题
你编写的".+?(?i)Pat.+?(?=:)存在以下问题:
- 匹配范围无边界限制:使用
.+?匹配引号到pat的内容时,没有排除双引号字符,可能出现跨字段匹配的问题,误把前面其他字段的内容也纳入匹配范围 - 规则完整性不足:没有匹配到键名末尾的闭合双引号,替换时会残留多余字符,且部分正则引擎中
(?i)内联忽略大小写修饰符仅对其后方的匹配规则生效,存在匹配遗漏风险 - 缺少键名校验逻辑:没有明确校验匹配内容是键名字段,存在误匹配到值字段中包含pat内容的风险
正确实现方案
匹配正则
"[^"]*(?i)pat[^"]*"(?=\s*:)
规则说明
":匹配键名开头的双引号实体[^"]*:匹配除双引号实体外的任意字符,严格限制匹配范围在当前引号包裹的内容内(?i)pat:不区分大小写匹配字符pat[^"]*:匹配pat之后到键名末尾双引号前的所有内容":匹配键名末尾的双引号实体(?=\s*:):正向预查,确认当前匹配内容后紧跟可选空格与冒号,保证匹配的是键名字段,不会命中值内容
替换内容
"matched Pattern"
效果验证
输入测试字符串:{1-Emp Name: "John", "2-Emp pat" : 1123,"3-Emp lwd" : 20}, "4-Emp Pat" : 1234}
替换后输出:{1-Emp Name: "John", "matched Pattern" : 1123,"3-Emp lwd" : 20}, "matched Pattern" : 1234}
与预期结果完全一致。
内容的提问来源于stack exchange,提问作者Ronald
相关产品推荐
相关产品推荐

