正则表达式仅提取 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 的域和子域的主要内容,如果未能解决你的问题,请参考以下文章

正则表达式从 youtube/vimeo url 中提取域和视频 ID

正则表达式 - 提取子域和域

使用正则表达式仅提取两个特定标记之间的数字

如何使用正则表达式从字符串中提取第 n 个 URL?

正则表达式 - 还提取带有 www 的 URL

从两种不同的 url 格式中提取数字的单个正则表达式?