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

使用preg_match提取XML数组内双引号包裹的图片URL失败如何解决

代码问题分析
  • 错误1:xpath() 方法返回的是包含多个SimpleXMLElement对象的数组,不能直接作为字符串传入preg_match(),必须先遍历每个PICTURE节点的PIC内容
  • 错误2:正则规则匹配逻辑错误:原规则@SRC=(.*)width@使用贪婪匹配.*会得到多余内容,且没有匹配SRC后的双引号边界,无法准确提取URL
  • 错误3:preg_match()返回的匹配结果是字符串数组,不是XML节点对象,不能用->PIC的方式取值
  • 错误4:$display变量未初始化就直接进行拼接操作,会触发PHP未定义变量警告
修正后代码
public function xmlParserPICtn():string
{
    // 初始化输出变量
    $display = '';
    // xpath查询得到所有符合条件的PICTURE节点数组
    $valuesPICtn = $this->xml->xpath("//OBJEKT[@ID='91727']//PICTURE"); 
    // 修正正则:匹配SRC="和"之间的内容,U代表非贪婪匹配,i兼容小写src写法
    $searchpattern = '@SRC="(.*?)"@i';
    // 遍历每个PICTURE节点
    foreach ($valuesPICtn as $pictureNode) {
        // 强制转字符串得到PIC节点内的HTML内容
        $picContent = (string)$pictureNode->PIC;
        // 匹配图片URL
        if (preg_match($searchpattern, $picContent, $matches)) {
            $imgUrl = $matches[1];
            $display .= '<li>';
            // 可根据需求调整为直接输出URL或者img标签
            $display .= '<img src="'.htmlspecialchars($imgUrl).'" alt="展示图">';
            $display .= '</li>';
        }
    }
    return $display;
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.23 14:54:03