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



我希望能够从html

返回一个数组与所有图像的列表(src="值)

[0] = "images/header.jpg"[1] = "images/person.jpg"

是否有一个正则表达式可以做到这一点?

提前感谢!

欢迎来到第100万个"如何使用正则表达式提取这些值"问题的世界;-)我建议在寻求答案之前使用搜索工具——这里只是一些提供代码的主题,可以完全满足您的需求;

  • 在HTML文本
  • 中替换所有图像src标签
  • 在php中获取图像src
  • 如何使用php从html中提取img src,标题和alt ?
  • 使用preg_match
  • 匹配IMG标签的SRC属性
  • php regex:获取src值
  • 动态替换所有标签(终极版)
  • preg_match_all,获取包含字符串
  • 的所有img标签

/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
        )
)

下面是由havard提供的正则表达式的一个更完善的版本:

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

这个表达式使用了forward &查看断言的背后,只得到你想要的。

$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
        )
)

我看到很多人都在为havpard的帖子和<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"
        )
)

这将避免匹配其他标签。

最新更新