0

我正在寻找一个简单的正则表达式来获取一段文本,从中解析出所有 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:// 开头的所有字符串,后跟至少以下字符之一:Az 0-9 、点、正斜杠 (/)、下划线、连字符 (-)、不区分大小写

可以对其进行任何改进吗?

4

1 回答 1

2

您没有验证 url,只是解析文本以查找 url,所以只需使用%\bhttps?://\S+%i

如果要检查此类 url 是否在<a标签内,请使用:

%<a\s[^>]*\bhref=['"](https?://\S+)["']%i

要验证 url 使用filter_var()功能:

var_dump(filter_var($url, FILTER_VALIDATE_URL)); 
于 2012-08-21T16:16:05.940 回答