从URL列表中排除图片网址

时间:2014-06-09 14:00:40

标签: php regex

我正在从网页收集所有网址的列表。我的问题是,该列表包含我在URL列表中不想要的所有图像。

此脚本为我提供了网页上的所有链接。

function getUrl($html)
    {
        $regex = '/\b(https?|ftp|file):\/\/[-A-Z0-9+&@#\/%?=~_|$!:,.;]*[A-Z0-9+&@#\/%=~_|$]/i';
        preg_match_all($regex, $html, $matches);
        $urls = $matches[0];
        return $urls;
    }

以下是从源代码中获取图像的正则表达式。

/\bhttps?:\/\/\S+(?:png|jpg)\b/

如何从提取的网址列表中排除图片?

更新

$regex = '/(?!.*(?:\.jpe?g|\.gif|\.png)$)\b(https?|ftp|file):\/\/[-A-Z0-9+&@#\/%?=~_|$!:,.;]*[A-Z0-9+&@#\/%=~_|$]/i';
        preg_match_all($regex, $html, $matches);
        $urls = $matches[0];

为什么这个正则表达式仍然无法排除图像?

1 个答案:

答案 0 :(得分:1)

您可能希望使用lookahead确保您的行以图片的扩展名结尾,然后从匹配列表中手动删除该行。例如,要确保一行代码以.png或.jpg结尾,请将其与以下内容进行匹配:

/\.(?=(png|jpg)$)/

通过您的网址列表for,如果他们不匹配该正则表达式,请将其克隆。

编辑:您实际上甚至不需要超前,只需尝试匹配:

\.(png|jpg)$

并弃置比赛