You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用preg_match从HTML的JSON数据中提取指定图片URL

如何用preg_match从HTML中提取指定JSON字段里的URL?

首先得指出你之前写的正则问题出在哪:你用了未转义的|,这个符号在正则里是**分支(或)**的意思,所以你的表达式/"image_full","1080|(.*?)"/会被解析成匹配"image_full","1080" 或者 (.*?)",完全偏离了你要捕获1080对应URL的目标。

方法一:修正正则表达式

针对你的需求,我们需要:

  1. 精准匹配"image_full","1080|这个前缀(注意转义|,因为它是正则元字符)
  2. 捕获从这个前缀后到第一个逗号前的内容(因为目标URL后面就是分隔不同分辨率地址的逗号)

修正后的代码如下:

$str = '<p>text html </p> <pre><code>,["pid","VJHggI_XrKLWQ"] ,["image_full","1080|https://pic.website.com/bdnsns,800|https://pic2.website.com/bdnsns"] </code></pre>';
// 如果是从文件/URL获取内容,用下面这行替换上面的$str定义
// $str = file_get_contents('your_target_url_or_file_path');

if(preg_match('/"image_full","1080\|([^,]+)/', $str, $matches)){
    echo $matches[1]; // 输出:https://pic.website.com/bdnsns
}

正则关键点解释:

  • \|:转义管道符,避免被当作分支解析
  • [^,]+:否定字符集,匹配任意非逗号的字符,刚好精准截取到1080对应的URL(因为后面就是分隔两个分辨率地址的逗号)
  • 如果担心URL中出现逗号(虽然图片URL极少出现这种情况),也可以调整为匹配到双引号前的内容:/"image_full","1080\|([^"]+)/,但这样会捕获整个分辨率字符串,后续需要再拆分。

方法二:用JSON解析(更健壮的方案)

因为目标内容本质是JSON片段,用正则提取容易因为HTML/JSON格式的微小变化失效,更可靠的方式是先提取JSON内容再解析:

$str = '<p>text html </p> <pre><code>,["pid","VJHggI_XrKLWQ"] ,["image_full","1080|https://pic.website.com/bdnsns,800|https://pic2.website.com/bdnsns"] </code></pre>';

// 第一步:提取pre标签内的JSON片段
preg_match('/<pre><code>(.*?)<\/code><\/pre>/s', $str, $codeMatches);
if (!empty($codeMatches[1])) {
    // 整理成合法的JSON数组格式(原内容是两个数组用逗号分隔,外层加[]包裹)
    $jsonStr = '[' . trim($codeMatches[1]) . ']';
    $data = json_decode($jsonStr, true);
    
    // 遍历找到image_full的项
    foreach ($data as $item) {
        if ($item[0] === 'image_full') {
            // 拆分不同分辨率的地址
            $imageEntries = explode(',', $item[1]);
            foreach ($imageEntries as $entry) {
                list($resolution, $url) = explode('|', $entry);
                if ($resolution === '1080') {
                    echo $url; // 输出目标URL
                    break;
                }
            }
            break;
        }
    }
}

这个方案的优势是:即使JSON里的空格、换行等格式变化,或者后续新增其他分辨率地址,代码依然能正常工作,不会像正则那样容易失效。

内容的提问来源于stack exchange,提问作者dexter

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 06:40:38