PHP正则expression式从string中删除http://

我有完整的url作为string,但我想删除在string开头的http://以很好地显示url(例如:www.google.com而不是http://www.google.com )

有人可以帮忙吗?

 $str = 'http://www.google.com'; $str = preg_replace('#^https?://#', '', $str); echo $str; // www.google.com 

这将同时适用于http://https://

你根本不需要正则expression式。 改用str_replace 。

 str_replace('http://', '', $subject); str_replace('https://', '', $subject); 

合并成一个单一的操作如下:

 str_replace(array('http://','https://'), '', $urlString); 

最好使用这个:

 $url = parse_url($url); $url = $url['host']; echo $url; 

更简单,适用于http:// https:// ftp://和几乎所有的前缀。

为什么不使用parse_url呢?

如果您坚持使用RegEx:

 preg_match( "/^(https?:\/\/)?(.+)$/", $input, $matches ); $url = $matches[0][2]; 

删除http:// domain (或https)并获取path:

  $str = preg_replace('#^https?\:\/\/([\w*\.]*)#', '', $str); echo $str; 

是的,我认为str_replace()和substr()比正则expression式更快,更干净。 这是一个安全快速的function。 很容易看到它究竟做了什么。 注意:如果你还想删除//,则返回substr($ url,7)和substr($ url,8)。

 // slash-slash protocol remove https:// or http:// and leave // - if it's not a string starting with https:// or http:// return whatever was passed in function universal_http_https_protocol($url) { // Breakout - give back bad passed in value if (empty($url) || !is_string($url)) { return $url; } // starts with http:// if (strlen($url) >= 7 && "http://" === substr($url, 0, 7)) { // slash-slash protocol - remove https: leaving // return substr($url, 5); } // starts with https:// elseif (strlen($url) >= 8 && "https://" === substr($url, 0, 8)) { // slash-slash protocol - remove https: leaving // return substr($url, 6); } // no match, return unchanged string return $url; }