如何在没有http的情况下匹配和替换域名?

时间:2014-05-06 07:42:35

标签: php regex

我想搜索字符串,如果找到了某个域,请将其删除并留下剩下的内容。这些域中没有一个以http或https开头。

我要删除的示例字符串:

domain.com or
domain.something.us
domain.something.uk

我想如果我使用通配符,它​​会起作用,但我没有做正确的事情。

$str = preg_replace( '/(?\.net|?\.org|?\.edu|?\.com)/', '', $str );

编辑:

因此,所有字符串通常都以此开头:

domain.com - 这里有一些很长的字符串......

我想要做的就是删除-之前的所有内容。但有时,用户可能忘记添加domain -。在这种情况下,它只需要返回字符串的其余部分。

输出结果为:

domain.com - 这里有点长。

应转换为:

这里有点长。

1 个答案:

答案 0 :(得分:2)

您可以将以下正则表达式与im修饰符一起使用:

^((?:[a-z0-9-]+\.)*[a-z0-9-]+(?:\.[a-z]+){1,2}\s*-)\s*

它会匹配:

  • 所有域名域名
  • 任意数量的子域
  • 多级TLD,例如.co.uk.co.in(最多两级)

请注意,它也会匹配很多无效的域名。但我想,如果您只是要从给定的文本中删除所有域名,那就无所谓了。

Regex101 Demo