PHP 正则表达式从字符串中删除 http://
Posted
技术标签:
【中文标题】PHP 正则表达式从字符串中删除 http://【英文标题】:PHP Regex to Remove http:// from string 【发布时间】:2012-03-21 22:25:24 【问题描述】:我有完整的 URL 作为字符串,但我想删除字符串开头的 http:// 以很好地显示 URL(例如:www.google.com 而不是 http://www.google.com)
有人可以帮忙吗?
【问题讨论】:
为什么需要正则表达式?为什么不直接删除前 7 个字符? 查看这个:***.com/questions/4875085/… @OliCharlesworth:https://
也可以是8个字符
如果您不需要使用正则表达式,请不要。 str_replace
比正则表达式更快,并且对于查看您的代码的其他人来说更容易阅读。
Remove http from variable、Parsing Domain From URL In php、How to remove first part of url in PHP? 的可能副本。
【参考方案1】:
$str = 'http://www.google.com';
$str = preg_replace('#^https?://#', '', $str);
echo $str; // www.google.com
这对http://
和https://
都有效
【讨论】:
来自对正则表达式不太了解的人,这是最容易理解和实施解决此问题的方法之一,非常感谢。 如果http是大写的,正则表达式会有什么变化? @sarfraz 怎么把www也删掉?【参考方案2】:你根本不需要正则表达式。请改用str_replace。
str_replace('http://', '', $subject);
str_replace('https://', '', $subject);
组合成单个操作如下:
str_replace(array('http://','https://'), '', $urlString);
【讨论】:
这也将删除任何后续的 http(s):// 匹配,这可能不是问题 - 但它可能是。例如,如果它在没有正确 urlencoding 的查询字符串中使用【参考方案3】:最好用这个:
$url = parse_url($url);
$url = $url['host'];
echo $url;
更简单,适用于 http://
https://
ftp://
和几乎所有前缀。
【讨论】:
除非它会丢弃任何路径和查询信息以及传输协议。因此,虽然它在 OP 示例中成功运行,但实际上并不是他们问题的正确答案。 @piersb 我不能完全同意你的看法。代码成功地提供了 Casey 正在寻找的结果。此外,它是为了一个目的而写的。如果您想显示路径或查询信息,您当然可以这样做 (php.net/manual/en/function.parse-url.php)。但是,我发现代码存在一个问题。如果我们尝试在不指定协议的情况下解析 url,它会显示一个错误,这就是我现在很恼火的事情:/【参考方案4】:为什么不改用parse_url
?
【讨论】:
【参考方案5】:删除http://domain(或https)并获取路径:
$str = preg_replace('#^https?\:\/\/([\w*\.]*)#', '', $str);
echo $str;
【讨论】:
【参考方案6】:如果你坚持使用 RegEx:
preg_match( "/^(https?:\/\/)?(.+)$/", $input, $matches );
$url = $matches[0][2];
【讨论】:
为了完整起见,我会在 http 之后添加一个s?
。是的,我知道这不是他的问题。 . . :))【参考方案7】:
是的,我认为 str_replace() 和 substr() 比正则表达式更快更干净。这是一个安全的快速功能。很容易确切地看到它的作用。注意:返回 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;
【讨论】:
【参考方案8】:<?php
// (PHP 4, PHP 5, PHP 7)
// preg_replace — Perform a regular expression search and replace
$array = [
'https://lemon-kiwi.co',
'http://lemon-kiwi.co',
'lemon-kiwi.co',
'www.lemon-kiwi.co',
];
foreach( $array as $value )
$url = preg_replace("(^https?://)", "", $value );
这段代码输出:
lemon-kiwi.co
lemon-kiwi.co
lemon-kiwi.co
www.lemon-kiwi.co
参见文档PHP preg_replace
【讨论】:
以上是关于PHP 正则表达式从字符串中删除 http://的主要内容,如果未能解决你的问题,请参考以下文章