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

Posted

技术标签:

【中文标题】使用 PHP 正则表达式从 html 中提取 JSON 对象【英文标题】:Extract JSON object from html using PHP regex 【发布时间】:2018-02-03 08:57:26 【问题描述】:

在阅读了所有相关线程后,我找不到任何能够从 html 内容中提取完整 json 对象的正则表达式,所以我希望有人可以帮助我获得正确的正则表达式来解决问题。

例如,想要提取的 json im 如下所示:

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

我正在尝试提取 html 内的 java 脚本函数中的整个“分类”对象。

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

我的目标是让正则表达式解析 html 并从 html 中提取分类对象,所以我留下以下内容:"page":"/products/1/","price":"350.00","country_code":"gb","brand":"apple" 然后我可以 json_decode

如果有人能帮助我找到正确的正则表达式,我将不胜感激,谢谢。

【问题讨论】:

为什么投反对票?我们都在生活中的某个时候需要帮助,我们都在某个时候开始。我想向更有经验的人寻求一点帮助是件坏事? 别担心投反对票,有人只是手比大脑快,看看我的回答。 【参考方案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/

【讨论】:

您的正则表达式会忽略右括号并捕获左括号之前的所有空格。 我能够从小提琴中得到这个工作但是上面的答案是抛出一个未知的修饰符'g'错误但是从你提供的小提琴中我能够使用以下方法让它工作: /"分类法":(.*?)\,/ 所以我非常感谢您的时间和精力,非常感谢。非常感谢:)

以上是关于使用 PHP 正则表达式从 html 中提取 JSON 对象的主要内容,如果未能解决你的问题,请参考以下文章

php正则表达式字符串中提取数字,并截取其中的6位

使用php从html页面中提取图像url

在js中使用正则表达式从字符串中提取正确的用户名

PHP 正则表达式匹配 img ,PHP 正则提取或替换图片 img 标记中的任意属性。

PHP - 从 CSS 文件中提取图像的所有路径的正则表达式

从字符串正则表达式 PHP 中提取数值 [关闭]