使用正则表达式从Google BigQuery中的网址中提取完整域名

问题描述 投票:-1回答:5

我可以请求您的帮助,以便使用REGEXP_EXTRACT构建一个在Google Big Query上使用的正则表达式,它将解析给定输入网址的完整域名吗?

解析条件:

  • 开始捕获应该是: 如果网址中有//:在第一次发生//之后 如果没有//:从字符串的开头
  • 结束捕获应该是:在第一个?或第一个/或第一个&之后或直到字符串的结尾如果没有找到?/&

一些例子:

htp://www.google.com --> www.google.com
htp://www.google.com/item/ --> www.google.com
htp://www.google.com?source=google --> www.google.com
htp://www.google.com&source=google --> www.google.com
www.google.com --> www.google.com
www.google.com/item/ --> www.google.com
www.google.com?source=google --> www.google.com
www.google.com&source=google --> www.google.com
http://google.com&source=google --> google.com
https://www.example-code.com/vb/string.asp --> www.example-code.com

我创建了这个REGEX:

REGEXP_EXTRACT('google.it?medium=cpc?cobranded=google&keywor‌​d=foo';, r'//([^/|^?|^&]+)')

但它只适用于包含//的网址,我不能得到一个有效的正则表达式,如果没有//在网址中。

regex google-bigquery
5个回答
0
投票

只是为了证明这个问题有BigQuery Tag(而不仅仅是正则表达式) - 请考虑以下选项

BigQuery Legacy SQL支持URL Functions集 以下是您案例中的使用示例

SELECT 
  url, 
  HOST(REPLACE(CASE WHEN url CONTAINS '//' THEN url ELSE 'http://' + url END, '&', '?')) AS output
FROM
  (SELECT 'http://www.google.com' AS url),
  (SELECT 'htp://www.google.com/item/' AS url),
  (SELECT 'htp://www.google.com?source=google' AS url),
  (SELECT 'htp://www.google.com&source=google' AS url),
  (SELECT 'www.google.com' AS url),
  (SELECT 'www.google.com/item/' AS url),
  (SELECT 'www.google.com?source=google' AS url),
  (SELECT 'www.google.com&source=google' AS url),
  (SELECT 'http://google.com&source=google' AS url)

0
投票
'//([^/|^?|^&]+)'

用'//'=>结果开始你的正则表达式需要以'//'开头

你可以做到这一点

'(?://)([^/|^?|^&]+)'

使用'()'我创建一个匹配组但使用?:这个匹配组不会出现在结果中


0
投票

它可能类似于

(w{0,3}\.*[a-z]+\.[a-z]*)

Explanation

应该匹配任何带或不带www的网址


0
投票

这会有用吗?

/b[\w.-]+(?:com|edu)

仅适用于'.com'和'edu'地址,但也许可以进一步修改。

**** ****更新

忍不住玩它。这是将域分组到捕获组的一个:

([\w.-]++(?!:)).*+

需要支持前瞻,并假设每个网址之间有换行符。

基本上它会找到任何一系列字母,数字,句号或短划线后面没有冒号。

冒号是为了防止它找到http:

'。* +'将消耗该行的其余部分,因此在第一次分组后它不会继续找到匹配项。


0
投票

BigQuery提供以下三个功能:

HOST() - 给定一个URL,将主机名作为字符串返回。

DOMAIN() - 给定一个URL,将域作为字符串返回。

TLD() - 给定一个URL,返回顶级域名和URL中的任何国家域名。

© www.soinside.com 2019 - 2024. All rights reserved.