【问题标题】:subdomain extract without regex with php没有使用 php 的正则表达式的子域提取
【发布时间】:2023-03-25 01:23:01
【问题描述】:

有没有没有正则表达式的 php 提取子域的好方法?

为什么没有正则表达式?

有很多关于这个的话题,如果他们是Find out subdomain using Regular Expression in PHP

互联网说它消耗内存 很多,如果有任何考虑或 你认为最好使用正则表达式(也许我们 使用很多功能来获得这个 解决方案)也请在下面发表评论。

例子

static.x.com = 'static'
helloworld.x.com = 'helloworld'
b.static.ak.x.com = 'b.static.ak'
x.com = ''
www.x.com = ''

感谢您的关注。

亚当斋月

【问题讨论】:

  • 这种情况下的正则表达式是微不足道的,它绝不会消耗“大量内存”
  • 这真的是一种安全/明智的数据收集方法吗?例如:www.bbc.co.uk
  • horatio 嗯是的,这就是为什么,我问这个。我自己使用 .co.id :|

标签: php


【解决方案1】:

http://php.net/explode?

只是在点上拆分它们?并做一些功能?

或者如果最后一部分(x.com)每次都相同,则在主机名上做一个子字符串,剥离最后一部分。

您在处理过程中必须做出的唯一例外是 www.x.com(从技术上讲,它是一个子域)。

$hostname = '....';
$baseHost = 'x.com';

$subdomain = substr($hostname, 0, -strlen($baseHost));
if ($subdomain === 'www') {
  $subdomain = '';
}

【讨论】:

    【解决方案2】:

    告诉你正则表达式“消耗很多”的人是个白痴。简单的正则表达式不是很消耗 CPU/内存。

    但是,出于您的目的,正则表达式显然是矫枉过正。您可以explode() 字符串,然后根据需要从数组中获取尽可能多的元素。但是,你的最后一个例子真的很糟糕。 www 是一个完全有效的子域。

    【讨论】:

    • +1 表示那个人是白痴。一个愚蠢无知的白痴。
    • 谢谢。人人都这么说,或者www的世界里可能有很多狂热的程序员。
    • 正则表达式可能会使用大量内存,但这取决于模式。说他们“总是”消费绝对是错误的。但说他们从来没有这样做也是错误的。
    【解决方案3】:

    你可以先使用 parse_url http://www.php.net/manual/de/function.parse-url.php 而不是爆炸。作为主机上的分隔符http://www.php.net/manual/de/function.explode.php

    我不会说它更快(只是测试一下),但也许这个解决方案更好。

    【讨论】:

      【解决方案4】:
      function getSubdomain($host) {
          return implode('.', explode('.', $host, -2));
      }
      

      explode 在点上拆分字符串并删除最后两个元素。然后implode 使用点作为分隔符再次组合这些片段。

      【讨论】:

      • @Adam: www.bbc 在这种情况下是子域。从技术上讲,这是正确的。
      猜你喜欢
      • 2011-05-17
      • 2014-10-31
      • 2023-03-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-12-04
      • 1970-01-01
      • 2016-08-18
      相关资源
      最近更新 更多