我有这样的背景:
id
我想让所有visit
0
等于{"id":"(.*?)".*?"visit":"0"}
。
我写这个模式:
123
你可以在这里看到结果: https://regex101.com/r/H0LXQ9/2
返回789
和456
!
但我期望的正确回报必须是789
和{{1}}。
它的正确模式是什么?
答案 0 :(得分:2)
这是因为.*?
虽然是懒惰的,但会延长到第一个 "visit":"0"
匹配成功(而不是贪婪的.*
,这会延长到最后匹配。)
您需要更改"任何字符"模式到"不是字符串边界"和"不是对象边界":
{"id":"([^"]*?)"[^}]*?"visit":"0"}
^^^^ ^^^^
演示:https://regex101.com/r/H0LXQ9/3
请注意,这只会在字符串值包含(转义)引号或大括号之前有效。通常,使用正则表达式解析JSON是个坏主意。使用JSON解析器并处理生成的对象。
答案 1 :(得分:1)