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
成为可选的。