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://的主要内容,如果未能解决你的问题,请参考以下文章

从字符串中删除所有反斜杠 - php - 正则表达式 [关闭]

使用php和正则表达式从字符串中删除数字和特殊字符[重复]

正则表达式:从部分字符串中删除换行符(PHP)

PHP常用正则表达式汇总

BigQuery 正则表达式从字符串中删除/替换文本列表

(php) 正则表达式删除注释但忽略字符串中的出现