正则表达式:捕获锚点中的图像和图像

时间:2014-04-03 16:16:50

标签: php regex html-parsing

使用下面的代码从页面抓取图像没有问题,但如何修改它以抓取包裹在锚点中的图像和图像?

        $output = preg_match_all('/<img.+src=[\'"]([^\'"]+)[\'"].*>/i', $post->post_content, $matches);

1 个答案:

答案 0 :(得分:0)

你可以使用这样的东西来抓取整个图像标签或只是字符串中的图像名称:

$string = '<img src="http://www.google.com/trans.gif">

<a href="http://www.google.com"><img src="http://www.yahoo.com/images/placeholder.gif"></a>';

if (preg_match_all('/<img.*?src=[\'"](.*?)[\'"].*?>/i', $string, $matches)) {
    print "<pre>"; print_r($matches); print "</pre>";
}
else {
    print "Could not find any matches";
}

这输出以下内容:

Array
(
    [0] => Array
        (
            [0] => <img src="http://www.google.com/trans.gif">
            [1] => <img src="http://www.yahoo.com/images/placeholder.gif">
        )

    [1] => Array
        (
            [0] => http://www.google.com/trans.gif
            [1] => http://www.yahoo.com/images/placeholder.gif
        )

)

REGEX的说明:

<img   .*?   src=   [\'"]   (.*?)   [\'"]   .*?   >
  ^     ^      ^      ^       ^       ^      ^    ^
  1     2      3      4       5       6      7    8
  1. <img寻找文字的开场图片标记。
  2. .*?匹配任何字符.,任意次*,直到它到达表达式?的下一部分。在这种情况下,表达式的下一部分是src=,因此一旦碰到它就会停止查找。
  3. src=查找src=
  4. 的确切文字
  5. [\'"]一个字符类,用于匹配单引号或双引号。
  6. (.*?)这与数字2相同,只是我们将它放在括号中,以便我们可以捕获它找到的任何内容。
  7. [\'"]与数字4相同。
  8. .*?与2号相同。
  9. >查找大于号的文字(关闭HTML括号)。
  10. Here is a working demo