【问题标题】:Using REGEXP_EXTRACT to get domain and subdomains使用 REGEXP_EXTRACT 获取域和子域
【发布时间】:2014-02-11 22:37:23
【问题描述】:

我只设法提取了我使用的网站列表的 TLD

REGEXP_EXTRACT(Domain_name, r'(\.[^.:]*)]\.?:?[0-9]*$') AS web_tld

例子:

我有

www.example1.abc.com
www.example2.efg.123.net

我想要结果

子域

example1
efg

abc
123

顶级域名

.com
.net

编辑: 在我的查询中遇到错误 '必须指定一个捕获组' 当我使用 (.?([^.:]+).([^.:]+).([^.:]+):?[0-9]*$) 作为正则表达式时

SELECT
REGEXP_EXTRACT(Domain, r'(\.?([^.:]+)\.([^.:]+)\.([^.:]+):?[0-9]*$)'),
FROM [weblist.domain]
ORDER BY 1
LIMIT 250;

【问题讨论】:

    标签: sql regex google-bigquery


    【解决方案1】:

    请注意,使用 HOST、DOMAIN 和 TLD 而不是自定义正则表达式可能会更好。

    【讨论】:

      【解决方案2】:

      由于您只能使用一个捕获组,我认为您实际上可以使用 3 个单独的正则表达式来获取您想要的值:

      SELECT
      REGEXP_EXTRACT(Domain, r'([^.:]+):?[0-9]*$'),
      REGEXP_EXTRACT(Domain, r'([^.:]+).[^.:]+:?[0-9]*$'),
      REGEXP_EXTRACT(Domain, r'([^.:]+).[^.:]+.[^.:]+:?[0-9]*$')
      FROM [weblist.domain]
      ORDER BY 1
      LIMIT 250;
      

      【讨论】:

      • 谢谢,但是当我使用这个正则表达式时,我的查询中似乎遇到了另一个错误
      猜你喜欢
      • 2012-08-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-07-07
      • 2012-11-02
      • 2019-09-10
      相关资源
      最近更新 更多