1
我想使用preg_match_all从一段HTML代码中提取所有的URL。我也试图忽略所有图像。PHP的正则表达式匹配URL,但不匹配图片
例HTML块:
$html = '<p>This is a test</p><br>http://www.facebook.com<br><img src="http://www.google.com/photo.jpg">www.yahoo.com https://www.aol.com<br>';
我使用下面,试图建立仅URLS的阵列。 (不是图像)
if(preg_match_all('~(?:(?:https://)|(?:http://)|(?:www\.))(?![^" ]*(?:jpg|png|gif|"))[^" <>]+~', $html, $links))
{
print_r($links);
}
在$链接阵列上面的例子应该包含:
http://www.facebook.com, www.yahoo.com, https://www.aol.com
谷歌被排除在外,因为它包含的.JPG图像扩展。
<img src="http://www.google.com/image%201.jpg">
它好像百分号引起的preg_match掰开URL并提取下面的“链接”:当我添加图像像这样一个HTML $出现该问题。
http://www.google.com/image
任何想法如何抓住唯一的网址是不是图像? (即使它们包含通常可能具有的特殊字符)
停止使用正则表达式。 – 2013-10-10 01:38:41
今天早些时候提出了这个问题。 '%20'是空格的URL编码。可能你的正则表达式与_space_匹配,而不是字面的“%20”。它停止在这个空间,因为这正是那个正则表达式所说的:'[^“<>] +'。 –
”停止使用正则表达式“ - 你有另一个建议吗? – user1647347