JSON环境中惰性正则表达式匹配异常,如何获取visit为0的id?
解决正则匹配visit值为0的id问题
你的问题出在原正则表达式会跨JSON对象进行匹配,导致错误捕获了不属于目标对象的id。
正确的正则表达式
{"id":"(.*?)",(?:(?!}).)*?"visit":"0"}
为什么原正则会出错?
原正则 {"id":"(.*?)".*?"visit":"0"} 中的 .*? 是非贪婪匹配,但它不会限制在单个JSON对象内部。当第一个对象的visit值为1时,正则会继续向后查找,直到找到第一个"visit":"0"(也就是第三个对象的该字段),这就导致它把第一个对象的id(123)和第三个对象的visit关联起来,错误捕获了123。
修正后的正则逻辑
(?:(?!}).)*是一个负向预查,它会匹配任意字符,但一旦遇到}就停止,这样就确保了我们的匹配范围被限制在单个JSON对象内部。- 这样修改后,正则只会在同一个对象中查找
id和对应的visit":"0",从而正确捕获到456和789。
额外建议
如果你的场景是处理JSON数据,更推荐使用专门的JSON解析库(比如Python的json模块、JavaScript的JSON.parse等),正则处理JSON容易出现边缘情况(比如字段顺序变化、存在转义字符等),而专业的解析工具会更可靠。
内容的提问来源于stack exchange,提问作者Nabi K.A.Z.
相关产品推荐
相关产品推荐

