PHP中的正则表达式返回包含来自html的所有图像的数组,例如:all src =“images / header.jpg”实例

时间:2011-04-19 18:36:47

标签: php html regex

我希望能够从html返回一个包含所有图像列表(src =“”值)的数组

  

[0] =“images / header.jpg”   [1] =“images / person.jpg”

是否有正则表达式可以执行此操作?

非常感谢提前!

4 个答案:

答案 0 :(得分:3)

欢迎来到百万分之一的世界“如何使用正则表达式来解决这些价值”问题;-)我建议在寻求答案之前使用搜索工具 - 这里只是提供代码来完成什么的一些主题你需要;

答案 1 :(得分:1)

/src="([^"]+)"/

图像将在第1组中。

示例:

preg_match_all('/src="([^"]+)"/', '<img src="lol"><img src="wat">', $arr, PREG_PATTERN_ORDER);

返回:

Array
(
    [0] => Array
        (
            [0] => src="lol"
            [1] => src="wat"
        )

    [1] => Array
        (
            [0] => lol
            [1] => wat
        )

)

答案 2 :(得分:1)

以下是Håvard提供的正则表达式的更精美版本:

/(?<=src=")[^"]+(?=")/

此表达式使用Lookahead&amp; Lookbehind Assertions只能获得你想要的东西。

$str = '<img src="/img/001.jpg"><img src="/img/002.jpg">';

preg_match_all('/(?<=src=")[^"]+(?=")/', $str, $srcs, PREG_PATTERN_ORDER);

print_r($srcs);

输出如下所示:

Array
(
    [0] => Array
        (
            [0] => /img/001.jpg
            [1] => /img/002.jpg
        )

)

答案 3 :(得分:0)

我看到很多人都在讨论Håvard的帖子和<script>问题。以下是更严格的解决方案:

<img.*?src="([^"]+)".*?>

示例:

preg_match_all('/<img.*?src="([^"]+)".*?>/', '<img src="lol"><img src="wat">', $arr, PREG_PATTERN_ORDER);

返回:

Array
(
    [1] => Array
        (
            [0] => "lol"
            [1] => "wat"
        )

)

这将避免匹配其他标签。 HERE is example