使用PHP正则表达式从HTML中提取JSON对象

4

阅读了所有相关的讨论后,我发现没有任何正则表达式可以从HTML内容中提取完整的JSON对象,因此我希望有人能帮助我找到正确的正则表达式来解决这个问题。

例如,我要提取的JSON如下所示:

"taxonomy": {"page":"/products/1/","price":"350.00","country_code":"gb","brand":"apple"},

我正在尝试从html页面的java script函数中提取整个“taxonomy”对象。

我已经尝试使用preg_match('/\taxonomy\s*=(.+)(?:;|/', $file, $m);,但没有成功,正则表达式是我想要学习的东西。

我的目标是让正则表达式解析html并从中提取taxonmy对象,以便我只留下以下内容:{"page":"/products/1/","price":"350.00","country_code":"gb","brand":"apple"},这样我就可以进行json_decode操作。

如果有人能帮助我得到正确的正则表达式,我将非常感激。谢谢。


为什么要踩我呢?我们在生活中都需要帮助,而且我们都有起点。我想向经验更丰富的人寻求一点帮助难道是错的吗? - Jrad51
不用担心被踩,有些人只是手比脑快而已,看看我的回答就好了。 - Viet Nguyen
1个回答

1
这个正则表达式模式应该有效,但它取决于你的完整HTML长什么样。
<?php
$file = '"taxonomy": {"page":"/products/1/","price":"350.00","country_code":"gb","brand":"apple"},
';
preg_match('@"taxonomy":(.*?)\},@s', $file, $m);

if(!empty($m[1])){
    $jsonString = "[".$m[1] . "}]";
    $array = json_decode($jsonString, true);
    print_r($array);
}

https://regex101.com/r/fytDO8/1/


你的正则表达式忽略了闭合括号并捕获了开放括号前的所有空格。 - tima
我能够从fiddle中使其工作,但使用上面的答案时,它会抛出一个未知修饰符'g'错误。然而,通过您提供的fiddle,我能够使用以下内容使其工作:/"taxonomy":(.*?)},/ - Jrad51
非常感谢您的时间和付出,我真心感激。非常感谢 :) - Jrad51

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接