首页 > 解决方案 > preg_replace 和 regexp 获取域

问题描述

我有一个从 HTTP_HOST 返回干净域的代码

preg_replace('#^(.*\.)?(.*\..*)$#', '$2', $_SERVER['HTTP_HOST'])

但如果域类似于 somedomain.co.uk - 它只返回 co.uk。在这种情况下,您能帮我重新制作正则表达式以返回正确的域吗?非常感谢!

标签: phppreg-replace

解决方案


你应该试试这个:

preg_replace('#^(https?:\/\/)?(www\d?\.)?([^\/\?]+)(.*)#', '$3', $url)

它适用于以下情况:

<?php 

$urls = [
    'https://www.somedomain.co.uk', 
    'http://www.somedomain.co.uk', 
    'www.somedomain.co.uk/something', 
    'www.somedomain.co.uk?q=1',
    'www2.somedomain.co.uk/something',
    'somedomain.co.uk',
    '192.168.1.1/something?q=1&x=2',
];

foreach($urls as $url) {
    echo preg_replace('#^(https?:\/\/)?(www\d?\.)?([^\/\?]+)(.*)#', '$3', $url) . '<br>';
}

推荐阅读