正则表达式基础

  • 点号(.):匹配任何单个字符(除了换行符)。
  • 星号(*):匹配前面的子表达式零次或多次。
  • 双引号(”):用于匹配包含特殊字符的字符串。
  • 括号(()):用于创建子表达式,可以捕获匹配的文本。

匹配图片src路径

preg_match('/src="([^"]+)"/', $htmlContent, $matches);

在这个示例中,$htmlContent是包含HTML内容的变量。正则表达式的意思是:

  • src=":匹配src属性的开始。
  • ([^"]+):捕获任何不包含双引号的字符序列。
  • ":匹配src属性的结束。

如果匹配成功,$matches数组将包含匹配的文本。$matches[1]将包含src属性的值。

处理不同的src路径格式

preg_match('/src\s*=\s*["\']?([^"\'>]+)["\']?/', $htmlContent, $matches);

这个正则表达式的意思是:

  • src\s*=\s*:匹配src属性,可能包含空格。
  • ["\']?:可选地匹配单引号或双引号。
  • ([^"\'>]+):捕获任何不包含单引号、双引号和大于号的字符序列。
  • ["\']?:可选地匹配单引号或双引号。
  • ["\']?:再次匹配可选的单引号或双引号。

匹配图片标签中的alt属性

preg_match('/<img[^>]*alt="([^"]+)"/', $htmlContent, $matches);

在这个示例中,<img[^>]*alt="([^"]+)"将匹配<img>标签,并捕获alt属性的值。

实例:提取页面中所有图片的srcalt路径

<?php
$htmlContent = <<<HTML
<html>
<head>
<title>Example Page</title>
</head>
<body>
<img src="image1.jpg" alt="Image 1">
<img src='image2.jpg' alt="Image 2">
<img src=image3.jpg alt="Image 3">
</body>
</html>
HTML;

preg_match_all('/src\s*=\s*["\']?([^"\'>]+)["\']?/i', $htmlContent, $srcMatches);
preg_match_all('/<img[^>]*alt="([^"]+)"/i', $htmlContent, $altMatches);

foreach ($srcMatches[1] as $index => $src) {
    echo "Image " . ($index + 1) . " src: " . $src . "\n";
    if (isset($altMatches[1][$index])) {
        echo "Image " . ($index + 1) . " alt: " . $altMatches[1][$index] . "\n";
    }
}
?>

这个脚本将输出:

Image 1 src: image1.jpg
Image 1 alt: Image 1
Image 2 src: image2.jpg
Image 2 alt: Image 2
Image 3 src: image3.jpg
Image 3 alt: Image 3