【问题标题】:Regex to match domain failing on input正则表达式匹配域输入失败
【发布时间】:2016-03-01 05:36:43
【问题描述】:

我创建了一个正则表达式来匹配输入中的域名:

$pattern = '/\w+\..{2,3}(?:\..{2,3})?(?:$|(?=\/))/i';
$url = 'http://wwe.com';
if (preg_match($pattern, $url, $matches) === 1) {
    echo $matches[0];
}

这个输入很好用:

http://google.com // output:google.com

但我无法为这些输入实现它:(如果用户输入额外的www

http://www.google.com // output:google.com
http://www.www.google.com // output:google.com

我错过了什么?

对此的任何帮助将不胜感激

【问题讨论】:

  • 为什么不使用parse_url()
  • @drew010 我不想返回数组
  • 只需返回 $url['host'] 并让它为您解析。

标签: php regex match


【解决方案1】:

这个怎么样?

<?php

$urls = [
    'http://google.com',
    'http://www.google.com',
    'http://www.www.google.com',
];

foreach($urls as $url) {
    $url = parse_url($url, PHP_URL_HOST);
    $url = preg_replace('/^(www\.)+/', '', $url);
    echo $url . "\n";
}

输出:

google.com
google.com
www.google.com

【讨论】:

  • 我的主要问题是你的最后一个输出。我需要它来匹配其他输出,所以根本没有 www
  • 编辑删除多个www.从url的开头。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-10-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多