使用REGEXP_EXTRACT获取域和子域

Jeu*_*sce 8 regex sql google-bigquery

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

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

例:

我有

www.example1.abc.com
www.example2.efg.123.net
Run Code Online (Sandbox Code Playgroud)

我想要结果

子域

example1
efg
Run Code Online (Sandbox Code Playgroud)

abc
123
Run Code Online (Sandbox Code Playgroud)

TLD

.com
.net
Run Code Online (Sandbox Code Playgroud)

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

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

Szy*_*mon 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;
Run Code Online (Sandbox Code Playgroud)


Jor*_*ani 5

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