sql - 使用 REGEXP_EXTRACT 获取域和子域

标签 sql regex google-bigquery

我只成功提取了我使用的网站列表的 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;

最佳答案

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

关于sql - 使用 REGEXP_EXTRACT 获取域和子域,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21273301/

相关文章:

sql - 递归 CTE 如何使用它

小数点正则表达式,小数点符号前 1 位,小数点后 2 位

java正则表达式排除列表模式

python - 如何创建一个新表并指定一个time_partitioning_field?

c# - 带有 C# 示例的 Google BigQuery

c# - NativeApplicationClient 和 OAuth2Authenticator 未解析

mysql - SQL:计算一个字段的值

php - 使用 LIKE 语句在 varchar 字段中搜索数字

php - MySql缓存问题...一些问题

python - 识别整数、字符串和浮点文字