0

我是 php 新手,正在尝试使用 preg_match 编写一个正则表达式来提取我从 http get 获得的 href 值。响应看起来:

{"_links":{"http://a.b.co/documents":{"href":"/docs"}}}

我只想提取 href 值并将其传递给我的下一个 api... 即 /docs。谁能告诉我如何提取这个?我一直在使用http://www.solmetra.com/scripts/regex/index.php来测试我的正则表达式 .. 从上一天开始就没有运气:(

请任何帮助将不胜感激。

谢谢,博士

4

3 回答 3

7

不需要正则表达式。

使用json_decode()然后访问该href属性。

例如:

$data = json_decode('{"_links":{"http://a.b.co/documents":{"href":"/docs"}}}', true);
echo $data['_links']['http://a.b.co/documents']['href'];

注意:如果可能的话,我鼓励你清理你的 JSON。特别是钥匙。

于 2012-05-24T19:24:08.887 回答
1

就像 HTML 解析一样,我建议不要使用正则表达式,而是使用 json 解析器然后读取值。查看 php.ini 中的 json_encode 和 json_decode 函数。

也就是说,如果您只需要 href 值,那么这里是一个正则表达式,可以在您给出的示例中执行此操作

preg_match('/"href":"([^"]+)"/',$string,$matches);
$matches[1];// this is the href

只有当您确切地知道自己想要什么以及它将采用的格式时,Regex 才是正确的工具。通常无法准确预测来自其他方的 json 和 HTML。还有一些合法的 HTML 和 json 的例子不能用正则表达式正确解析,所以通常为它们使用专门的解析器。

于 2012-05-24T19:24:43.583 回答
1

不要使用正则表达式,使用json_decode(). JSON 是上下文无关语法的一个很好的例子,你甚至不应该尝试使用正则表达式进行解析。

这是 PHP.NET关于使用json_decode()这种事情的参考。

于 2012-05-24T19:25:08.620 回答