我正在寻找一个简单的正则表达式来获取一块文本,解析出其中的所有url,并返回它们。url基本上会被<a href>
标签取代,所以http://google.com
会变成<a href="http://google.com">http://google.com</a>
,等等。所以我认为它不需要非常彻底,也不需要允许各种疯狂的url方案和非英语字符。
这是我想出的一个正则表达式:
%http[s]?://[A-z0-9/'.'-_]+%i
它将匹配以http://或https://开头的所有字符串,后跟至少一个以下字符:A-z 0-9、句点、正斜杠(/)、下划线、连字符(-)、不区分大小写的
能对它做些改进吗?
您没有验证URL,只是解析文本以查找URL,所以只需使用%'bhttps?://'S+%i
如果你想检查这样的url是否在<a
标签内,请使用:
%<a's[^>]*'bhref=['"](https?://'S+)["']%i
要验证url,请使用filter_var()
函数:
var_dump(filter_var($url, FILTER_VALIDATE_URL));