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; }