preg_match_all を使用して、HTML コードのブロックからすべての 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>';
以下を使用して、URL のみの配列を作成しようとしています。(画像ではありません)
if(preg_match_all('~(?:(?:https://)|(?:http://)|(?:www\.))(?![^" ]*(?:jpg|png|gif|"))[^" <>]+~', $html, $links))
{
print_r($links);
}
上記の例では、$links 配列に以下が含まれている必要があります。
http://www.facebook.com, www.yahoo.com, https://www.aol.com
.jpg 画像拡張子が含まれているため、Google は省略されています。このような画像を $html に追加すると、問題が発生します。
<img src="http://www.google.com/image%201.jpg">
パーセント記号によって preg_match が URL を分解し、次の「リンク」を抽出するようです。
http://www.google.com/image
画像ではない URL のみを取得する方法はありますか? (URLに一般的に含まれる特殊文字が含まれている場合でも)