我正在收集来自网页的所有url列表。我的问题是,列表中包含的所有图像,我也不想在我的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/
如何从提取的url列表中排除图像?
$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];
为什么这个正则表达式仍然不能排除图像?
您可能希望使用向前看来确保您的行以图像的扩展名结束,然后手动从匹配列表中删除该行。例如,要确保一行代码以.png或.jpg结尾,请对其进行匹配:
/'.(?=(png|jpg)$)/
所以for
通过你的url列表,克隆他们,如果他们不匹配的正则表达式。
编辑:实际上你甚至不需要向前看,只要试着匹配这个:
'.(png|jpg)$
和丢弃匹配