我正在从网页收集所有网址的列表。我的问题是,该列表包含我在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];
为什么这个正则表达式仍然无法排除图像?
答案 0 :(得分:1)
您可能希望使用lookahead确保您的行以图片的扩展名结尾,然后从匹配列表中手动删除该行。例如,要确保一行代码以.png或.jpg结尾,请将其与以下内容进行匹配:
/\.(?=(png|jpg)$)/
通过您的网址列表for
,如果他们不匹配该正则表达式,请将其克隆。
编辑:您实际上甚至不需要超前,只需尝试匹配:
\.(png|jpg)$
并弃置比赛