15

我正在尝试运行 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

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

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

PHP 4.4.7

4

6 回答 6

44

你的表达不正确。尝试:

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

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

于 2010-02-01T21:45:18.600 回答
5

这是一种使用内置函数 (php >= 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
于 2010-02-01T22:23:36.610 回答
3

如果你需要自己使用preg_match(),试试这个:

 preg_match('/(?<!_)src=([\'"])?(.*?)\\1/',$content, $matches);
于 2013-06-28T18:09:31.757 回答
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。

于 2010-02-01T21:50:31.383 回答
1

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

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

有关更多信息,请参阅我的答案:如何使用 php 从 html 中提取 img src、title 和 alt?

于 2010-09-28T17:08:28.873 回答
1

此任务应由 dom 解析器执行,因为 regex 是 dom-ignorant。

代码:(演示

$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 属性值

干净、合适、易于阅读和管理。

于 2019-05-15T12:12:53.090 回答