【发布时间】:2020-05-21 11:08:58
【问题描述】:
我需要使用正则表达式查找 JSON 文档的键值对。问题是我无法正确理解如何确定匹配数据的选择范围。
使用这个正则表达式,
"email"\s*:\s*".*"
它将选择整个文档,直到找到最后一个"。
但我只想选择第一个 ",所以选择是这样的:
“电子邮件”:“foobar@foo.bar”
为了实现这一点,我尝试使用这样的锚:
"email"\s*:\s*^".*"$
但它没有按预期工作。 实现这一目标的更好方法是什么?
请注意,如果电子邮件包含双引号,则 json 字符串将如下所示:
{"email":"foo@bar.c\"om"}
在上述情况下,我们可能还需要能够跳过所有\"?
我还需要从一个包含 1.6m + 内联 JSON 文档的大文件中获取这些数据。
【问题讨论】:
-
不要使用 RegEx 解析 JSON,它们不适合。相反,使用
json_decode() -
使用
json_decode()实际上会变得如此缓慢