Php 用于从URL中删除http://和www.的正则表达式
我有一堆这样的网址Php 用于从URL中删除http://和www.的正则表达式,php,regex,string,Php,Regex,String,我有一堆这样的网址 $urls = array( 'https://site1.com', 'https://www.site2.com', 'http://www.site3.com', 'https://site4.com', 'site5.com', 'www.site6.com', 'www.site7.co.uk', 'site8.tk' ); $urls = array( 'site1.com',
$urls = array(
'https://site1.com',
'https://www.site2.com',
'http://www.site3.com',
'https://site4.com',
'site5.com',
'www.site6.com',
'www.site7.co.uk',
'site8.tk'
);
$urls = array(
'site1.com',
'site2.com',
'site3.com',
'site4.com',
'site5.com',
'site6.com',
'site7.co.uk',
'site8.tk'
);
我想从这些字符串中删除http、https、://和www.,以便输出如下所示
$urls = array(
'https://site1.com',
'https://www.site2.com',
'http://www.site3.com',
'https://site4.com',
'site5.com',
'www.site6.com',
'www.site7.co.uk',
'site8.tk'
);
$urls = array(
'site1.com',
'site2.com',
'site3.com',
'site4.com',
'site5.com',
'site6.com',
'site7.co.uk',
'site8.tk'
);
我想出了这个解决办法
foreach ($urls as $url) {
$pattern = '/(http[s]?:\/\/)?(www\.)?/i';
$replace = "";
echo "before: $url after: ".preg_replace('/\/$/', '', preg_replace($pattern, $replace, $url))."\n";
}
我想知道怎样才能避免第二次怀孕。有什么想法吗
/^(https?:\/\/)?(www\.)?(.*)\/$/i
并使用
上的内容$3
。或者,更好的是,将前两个括号更改为非捕获版本(?:)
,并使用1上的内容。preg\u replace也可以使用数组,因此您甚至不需要循环。您可以使用一个衬里完成此操作:
$urls = preg_replace('/(?:https?:\/\/)?(?:www\.)?(.*)\/?$/i', '$1', $urls);
根据您到底想做什么,最好使用PHP自己的URL解析功能,即:
parse_url
将为您提供url的主机,即使它将包含端口号或HTTP身份验证数据。(这是否是您所需要的,取决于您的具体使用情况。)简短:
$urls = preg_replace('~^(?:https?://)?(?:www[.])?~i', '', $urls);
谢谢你的赏金,我只是不明白为什么。你的答案很完美。这应该是一样的:
$url=preg_replace(“~^(?:https?:/)?(?:www\)?~i',“,$url”)
@paulpro这是否同时适用于http和https?@Azzo是的,?
使s
成为可选的。