无法使用正则表达式获取图像src

时间:2018-11-09 07:19:11

标签: php regex preg-replace

我正在使用正则表达式下面的元素在image标签前面添加一个元素,但是它不起作用。我从Add link around img tags with regexp

获得了这段代码
preg_replace('#(<img[^>]+ src="([^"]*)" alt="[^"]*" />)#', '<a href="$2" ...>$1</a>', $str)

但是,如果我在不使用src的情况下使用以下代码,则可以正常工作。

 preg_replace('#(<img[^>]+ alt="[^"]*" />)#', '<a href="" ...>$1</a>', $str)

我无法从image标签获取src的任何原因。

我的图片标签是<img src="" alt="">

1 个答案:

答案 0 :(得分:0)

执行此类操作的更好方法是使用PHP的DOMDocument类,因为它与人们编写HTML的方式无关(例如,将alt属性放在src属性之前)。这样的事情适合您的情况:

$html = '<div id="x"><img src="/images/xyz" alt="xyz" /><p>hello world!</p></div>';
$doc = new DomDocument();
$doc->loadHTML($html, LIBXML_HTML_NOIMPLIED | LIBXML_HTML_NODEFDTD);
$xpath = new DomXPath($doc);
$images = $xpath->query('//img');
foreach ($images as $img) {
    // create a new anchor element
    $a = $doc->createElement('a');
    // copy the img src attribute to the a href attribute
    $a->setAttribute('href', $img->attributes->getNamedItem('src')->nodeValue);
    // add the a to the images parent
    $img->parentNode->replaceChild($a, $img);
    // make the image a child of the <a> element
    $a->appendChild($img);
}
echo $doc->saveHTML();

输出:

<div id="x"><a href="/images/xyz"><img src="/images/xyz" alt="xyz"></a><p>hello world!</p></div>

Demo on 3v4l.org