使用preg_match匹配IMG标记的SRC属性

时间:2010-02-01 21:36:22

标签: php regex parsing preg-match src

我正在尝试运行preg_match从文章中的第一个IMG标记中提取SRC属性(在这种情况下,存储在$ row-> introtext中)。

preg_match('/\< *[img][^\>]*[src] *= *[\"\']{0,1}([^\"\']*)/i', $row->introtext, $matches);

而不是像

那样
images/stories/otakuzoku1.jpg

<img src="images/stories/otakuzoku1.jpg" border="0" alt="Inside Otakuzoku's store" />

我得到了

0

正则表达式应该是正确的,但我不知道为什么它似乎匹配border属性而不是src属性。

或者,如果你有耐心阅读这篇文章而没有直接跳到回复字段并输入“使用HTML / XML解析器”,那么可以推荐一个很好的教程,因为我找不到一个完全适用于PHP 4。

PHP 4.4.7

6 个答案:

答案 0 :(得分:33)

你的表情不正确。尝试:

preg_match('/< *img[^>]*src *= *["\']?([^"\']*)/i', $row->introtext, $matches);

请注意删除img和src周围的括号以及其他一些清理。

答案 1 :(得分:5)

这是一种使用内置函数(php&gt; = 4)的方法:

$parser = xml_parser_create();
xml_parse_into_struct($parser, $html, $values);
foreach ($values as $key => $val) {
    if ($val['tag'] == 'IMG') {
        $first_src = $val['attributes']['SRC'];
        break;
    }
}

echo $first_src;  // images/stories/otakuzoku1.jpg

答案 2 :(得分:2)

尝试:

include ("htmlparser.inc"); // from: http://php-html.sourceforge.net/

$html = 'bla <img src="images/stories/otakuzoku1.jpg" border="0" alt="Inside Otakuzoku\'s store" /> noise <img src="das" /> foo';

$parser = new HtmlParser($html);

while($parser->parse()) {
    if($parser->iNodeName == 'img') {
        echo $parser->iNodeAttributes['src'];
        break;
    }
}

将产生:

images/stories/otakuzoku1.jpg

它应该适用于PHP 4.x。

答案 3 :(得分:2)

如果您需要自己使用preg_match(),请尝试以下操作:

 preg_match('/(?<!_)src=([\'"])?(.*?)\\1/',$content, $matches);

答案 4 :(得分:1)

我使用的正则表达式要简单得多。我的代码假定传递给它的字符串只包含一个没有其他标记的img标记:

$pattern = '/src="([^"]*)"/';

有关详情,请参阅我的回答:How to extract img src, title and alt from html using php?

答案 5 :(得分:1)

由于正则表达式不了解dom,因此应该由dom解析器执行此任务。

代码:(Demo

$row = (object)['introtext' => '<div>test</div><img src="source1"><p>text</p><img src="source2"><br>'];

$dom = new DOMDocument();
$dom->loadHTML($row->introtext);
echo $dom->getElementsByTagName('img')->item(0)->getAttribute('src');

输出:

source1

这说:

  1. 解析整个html字符串
  2. 隔离所有img标签
  3. 隔离第一个img标签
  4. 隔离其src属性值

干净,适当,易于阅读和管理。