我如何从字符串中获取img标记

时间:2014-10-24 15:10:40

标签: php regex string

我在php中的变量中有html字符串。我想从中得到标签。例如:

  $str ='<p><img src="link"></p><p>text</p>';

如何从此字符串中获取<img src="link">(或任何img标记及其内容)?

4 个答案:

答案 0 :(得分:3)

所有答案看起来都有些混乱,包括正则表达式。

你不需要它。

$str ='<p><img src="link"></p><p>text</p>';
echo strip_tags($str, '<img>');

会很好地工作。

Strip_tags Ref

答案 1 :(得分:2)

您可以使用正则表达式,但必须小心处理可能存在的任何属性,或者您可以使用DOMDocument::loadHTML功能以及DOMDocument::getElementsByTagName

$doc = new DOMDocument();

$doc->loadHTML($str);

// gets all img tags in the string    
$imgs = $doc->getElementsByTagName('img');

foreach ($imgs as $img) {    
    $img_strings[] = $doc->saveHTML($img);    
}

然后,您在$img_strings变量中包含所有img标记。

foreach循环中,您还可以获取标记内的属性: $img->getAttribute('src');

答案 2 :(得分:0)

如果我理解你想要做的事情:

我会建议像 what is described here.

他们创建了一个函数来选择两个特定字符串之间包含的字符串。这是他们的功能:

function getInnerSubstring($string,$delim){
    // "foo a foo" becomes: array(""," a ","")
    $string = explode($delim, $string, 3); // also, we only need 2 items at most
    // we check whether the 2nd is set and return it, otherwise we return an empty string
    return isset($string[1]) ? $string[1] : '';
}

只要您的HTML中没有另一组"",那么这应该适合您。

如果您使用此功能,则可以搜索仅在这两个"

之间的内容

答案 3 :(得分:-1)

php中的用户正则表达式。你应该为它编写正则表达式

http://php.net/manual/en/function.preg-match.php

<img\s[^<>]*>