删除PHP中字符串的某些部分

删除PHP中字符串的某些部分,php,javascript,string,Php,Javascript,String,我已经看到了很多关于这个问题的问题,但似乎没有一个能解决我的问题。我想创建一个功能,将删除所有从网站地址,除了域名。 例如,如果用户输入:我想获得stackoverflow,如果用户输入facebook.com/user/bacon我想获得facebook,方法相同 有人知道我可以删除字符串某些部分的函数或方法吗?也许它会搜索http,当找到它时,它会删除所有内容,直到//之后,然后它会搜索www,如果找到它会删除所有内容,直到。然后它会保留所有的东西直到下一个点,在那里它会移除后面的所有东西?

我已经看到了很多关于这个问题的问题,但似乎没有一个能解决我的问题。我想创建一个功能,将删除所有从网站地址,除了域名。 例如,如果用户输入:我想获得stackoverflow,如果用户输入facebook.com/user/bacon我想获得facebook,方法相同

有人知道我可以删除字符串某些部分的函数或方法吗?也许它会搜索http,当找到它时,它会删除所有内容,直到//之后,然后它会搜索www,如果找到它会删除所有内容,直到。然后它会保留所有的东西直到下一个点,在那里它会移除后面的所有东西?现在来看,这可能会导致网站出现问题,因为我只剩下en了

有什么想法吗(最好用PHP,但也欢迎使用JavaScript)

编辑1: 多亏了大量反馈,我想我已经能够设计出一个满足我需求的函数:

 function getdomain($url) {
    $parts = parse_url($url);
    if($parts['scheme'] != 'http') {
       $url = 'http://'.$url;
    }
    $parts2 = parse_url($url);

    $host = $parts2['host'];
    $remove = explode('.', $host);

    $result = $remove[0];
    if($result == 'www') {
       $result = $remove[1];
    }

    return $result;
 } 

它并不完美,至少考虑到子域,但我认为有可能对此做些什么。可能在末尾添加第二个if语句来检查数组的长度。如果大于2,则选择项目nr1而不是项目nr0。这显然给我带来了与使用.co.uk的任何域相关的麻烦(因为这将是很长的树项目,但我不想返回co)。我会试着解决一下,看看我能想出什么办法。如果你们中的一些PHP大师也能看一看,我会很高兴的。我没有你们中的任何一个熟练或有经验……:P

这是一种非常快速的方法,但应该在PHP中实现您想要的功能:

function getDomain( $URL ) {
    return explode('.',$URL)[1];
}
我会在有机会的时候更新它,但基本上它会在句号处将URL分成几部分,然后返回第二个项目,这应该是域。对于较长的域(如www.abc.xyz.com),需要更多的逻辑,但对于普通URL,这就足够了。

Javascript:

document.domain.replace(".com","")
PHP:


使用parse_url将url拆分为不同的部分。您需要的是主机名。然后,您需要将其按点拆分,得到第一部分:

$url    = 'http://facebook.com/blahblah';
$parts  = parse_url($url);
$host   = $parts['host']; // facebook.com
$foo    = explode('.', $host);
$result = $foo[0]; // facebook

您可以使用PHP中的
parse\u url
函数,该函数返回您想要的内容-

使用PHP中的parse\u url方法获取domain.com,然后使用空字符串替换.com。 我对正则表达式有点生疏,但这应该可以用

$url='http://www.en.wikipedia.org';
$domain = parse_url($url, PHP_URL_HOST); //Will return en.wikipedia.org
$domain = preg_replace('\.com|\.org', '', $domain);


//检查正则表达式

您正在查找有关正则表达式的信息。这有点复杂,所以要准备好仔细阅读。在您的情况下,最好使用
preg\u match
preg\u replace
。它根据您的模式搜索匹配项,并用替换项替换匹配项

我会从这样一个模式开始:查找
.com
.net
.org
并删除它和它之后的所有内容。然后找到最后一个
,并删除它和它前面的所有内容。最后,如果
/
存在,删除它和它前面的所有内容

if (preg_match("/^http:\/\//i",$url))
preg_replace("/^http:\/\//i","",$url);

if (preg_match("/www./i",$url))
preg_replace("/www./i","",$url);

if (preg_match("/.com/i",$url))
preg_replace("/.com/i","",$url);

if (preg_match("/\/*$/",$url))
preg_replace("/\/*$/","",$url);
^
=字符串开头
i
=不区分大小写
\
=转义字符
$
=字符串的结尾


这将需要反复使用和调整,但它应该让您指向正确的方向。

如果不直接回答您的问题(因为它看起来像一个),为什么不使用?好的,谢谢。我试图寻找答案,但只发现有人想要拆分,比如说一个包含预设内容的字符串。我不知道php中有一个函数可以满足我的要求。非常感谢!:)它必须是一个可以访问当前域名列表的例行程序,或者,为了正确地分析您感兴趣的实际域名部分的开始位置,它将不适用于(没有www)例如,在5.4之前的PHP版本中,您不能为返回数组的函数下标。那么
mydomain.co.uk
呢?@fireeydboy它将正确返回“mydomain”,因为我们得到结果的第一项(在这种情况下是3个元素)arrayEh,是的,您是对的,但是
www.mydomain.co.uk
呢,或者
mysubdomain.mydomain.co.uk
或者
www.mysubdomain.mydomain.co.uk
?那么子域呢?@fireyedboy你是对的。您可以专门从主机名中过滤掉“www”,但这对非标准子域不起作用。在这种情况下,我能想到的唯一解决方案是有一个可能的TLD的完整列表,这样就可以过滤掉主机名的结尾。
if (preg_match("/^http:\/\//i",$url))
preg_replace("/^http:\/\//i","",$url);

if (preg_match("/www./i",$url))
preg_replace("/www./i","",$url);

if (preg_match("/.com/i",$url))
preg_replace("/.com/i","",$url);

if (preg_match("/\/*$/",$url))
preg_replace("/\/*$/","",$url);