正在寻找一个简单的url解析regexp


Looking for a simple url parsing regexp

我正在寻找一个简单的正则表达式来获取一块文本,解析出其中的所有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));