正则表达式仅提取 url 的域和子域
Posted
技术标签:
【中文标题】正则表达式仅提取 url 的域和子域【英文标题】:Regex to extract only domain and subdomain for urls 【发布时间】:2019-09-05 08:04:34 【问题描述】:我需要从 URl 中提取 2 个域。例如,网站名称为 domain.domain2.com -> domain.domain2.com;但是 m.domain.domain2.com -> domain.domain2.com;还有 domain.domain2.com/london -> domain.domain2.com。
我写了一个表达式^.+[\\./]([^\\.]+\\.[^\\.]+)$
,但它总是返回 domain2.com。
我应该添加什么来获得想要的结果?
【问题讨论】:
要修复它,您必须了解正则表达式的作用。你?你想和它匹配什么样的字符串(pattern)?你的例子不是很有帮助。 我想提取包含 '.com' 的东西和 2(仅!)在 '.com' 域名旁边用点分隔的字符串。 喜欢([^.]+)\.([^.]+2)\.com(?=\/|$)
?见regex101.com/r/t0EjI9/1
【参考方案1】:
我想提取包含 '.com' 事物和 2(仅!)在 '.com' 域名旁边的字符串,以点分隔
以下 BigQuery 标准 SQL 示例
#standardSQL
WITH `project.dataset.table` AS (
SELECT 'domain.domain2.com' url UNION ALL
SELECT 'm.domain.domain2.com' UNION ALL
SELECT 'domain.domain2.com/london'
)
SELECT *,
REGEXP_EXTRACT(url, r'([^.]+.[^.]+2.com)(?:/|$)') domain_and_subdomain
FROM `project.dataset.table`
有输出
Row url domain_and_subdomain
1 domain.domain2.com domain.domain2.com
2 m.domain.domain2.com domain.domain2.com
3 domain.domain2.com/london domain.domain2.com
【讨论】:
【参考方案2】:请使用NET functions
选择 NET.HOST('http://m.domain.domain2.com/london')
返回:
m.domain.domain2.com
【讨论】:
但我想要 m.domain.domain2.com -> domain.domain2.com 去掉“m”的逻辑是什么? 对 m.domain.domain2.com 和 domain.domain2.com 进行分组以上是关于正则表达式仅提取 url 的域和子域的主要内容,如果未能解决你的问题,请参考以下文章