根据之前的preg_match结果进行preg_match

时间:2018-08-01 11:16:58

标签: php

我有这段代码,它通过一个字符串并输出第一个img的src=""属性。

我也需要弄清楚alt=""属性。

$first_image = '';
if ((preg_match('/<img[^>]*>/i', $article_fulltext, $matches ) == 1))
if (preg_match('/src="([^"]*)"/', $matches[0], $morematches ) == 1)
$first_image = $morematches[0];

我已经尝试过,但是没有用;

$first_image = '';
if ((preg_match('/<img[^>]*>/i', $article_fulltext, $matches ) == 1))
if (preg_match('/src="([^"]*)"/', $matches[0], $morematches ) == 1)
if (preg_match('/alt="([^"]*)"/', $matches[0], $morematchesAlt ) == 1)
$first_image = $morematches[0];
$first_image_alt = $morematchesAlt[0];

我做错了什么?

2 个答案:

答案 0 :(得分:2)

同意您宁愿使用DOMDocument的意见,但是为了使用代码,您必须对其进行一些更改,例如:

<?php

$article_fulltext = '<html><body><img src="imgSrc" alt="imgAlt"></body></html>';

if (preg_match('/<img[^>]*>/i', $article_fulltext, $matches)) {
    preg_match('/src="([^"]*)"/', $matches[0], $morematches);
    preg_match('/alt="([^"]*)"/', $matches[0], $morematchesAlt);

    $first_image = $morematches[0];
    $first_image_alt = $morematchesAlt[0];

    var_dump($first_image);
    var_dump($first_image_alt);
}

运行此脚本时-您收到下一个结果:

string(12) "src="imgSrc""
string(12) "alt="imgAlt""

答案 1 :(得分:1)

您的代码缺少大括号来正确定义条件语句的结构。每当在if子句下使用多个语句时,建议使用花括号来防止它们嵌套并产生不希望的效果。

此外,正如已经提到的,正则表达式并不是解析HTML的最佳方法,因此这是使用DOMDocument的解决方案:

<?php
    # Create a new DOMDocument instance and load the html content.
    $dom = new DOMDocument;
    $dom -> loadHTML($article_fulltext);

    # Cache the first image element.
    $img = $dom -> getElementsByTagName("img") -> item(0);

    # Print its 'src' and 'alt' attributes.
    echo $img -> getAttribute("src");
    echo $img -> getAttribute("alt");
?>