模式不适用于json上下文中的惰性正则表达式

时间:2018-05-26 03:49:59

标签: json regex

我有这样的背景:

id

我想让所有visit 0等于{"id":"(.*?)".*?"visit":"0"}

我写这个模式:

123

你可以在这里看到结果: https://regex101.com/r/H0LXQ9/2

返回789456

但我期望的正确回报必须是789和{{1}}。

它的正确模式是什么?

2 个答案:

答案 0 :(得分:2)

这是因为.*?虽然是懒惰的,但会延长到第一个 "visit":"0"匹配成功(而不是贪婪的.*,这会延长到最后匹配。)

您需要更改"任何字符"模式到"不是字符串边界"和"不是对象边界":

{"id":"([^"]*?)"[^}]*?"visit":"0"}
        ^^^^    ^^^^

演示:https://regex101.com/r/H0LXQ9/3

请注意,这只会在字符串值包含(转义)引号或大括号之前有效。通常,使用正则表达式解析JSON是个坏主意。使用JSON解析器并处理生成的对象。

答案 1 :(得分:1)

你可以使用前瞻:

\d+(?=","title[^}]*?visit":"0"})

https://regex101.com/r/H0LXQ9/4