使用REGEXP_EXTRACT获取域和子域

时间:2014-01-22 02:54:54

标签: sql regex google-bigquery

我只是设法提取我使用的网站列表的顶级域名

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

示例:

我有

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

我想要结果

子域

example1
efg

abc
123

TLD

.com
.net

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

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

2 个答案:

答案 0 :(得分:9)

由于您只能使用一个捕获组,我认为您实际上可以使用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;

答案 1 :(得分:5)

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