我有一些继承的代码,其目的是识别字符串中的url,如果它不存在,则将http://协议添加到它们之前。
return preg_replace_callback(
'/((https?:\/\/)?\w+(\.\w{2,})+[\w?&%=+\/]+)/i',
function ($match) {
if (stripos($match[1], 'http://') !== 0 && stripos($match[1], 'https://') !== 0) {
$match[1] = 'http://' . $match[1];
}
return $match[1];
},
$string);
它正常工作,除非域名有连字符。因此,例如,以下字符串只能部分工作。
$string = "In front mfever.com/1 middle http://mf-ever.com/2 at the end";
任何正则表达式的天才能看出它有什么问题吗?
答案 0 :(得分:0)
您只需添加可选的短划线:
((https?:\/\/)?\w+\-?\w+(\.\w{2,})+[\w?&%=+\/]+)
答案 1 :(得分:0)