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

Jon*_*onk 3 regex google-bigquery

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

\n\n

解析条件:

\n\n
    \n
  • 开始捕获应该是:\n\n
      \n
    • //如果url 中第一次//出现后有 a :
    • \n
    • //如果字符串开头没有:
    • \n
  • \n
  • 结束捕获应该是:在第一个?或第一个/或第一个之后&或直到字符串末尾(如果没有找到?,/或 )&
  • \n
\n\n

一些例子:

\n\n
htp://www.google.com --> www.google.com\nhtp://www.google.com/item/ --> www.google.com\nhtp://www.google.com?source=google --> www.google.com\nhtp://www.google.com&source=google --> www.google.com\nwww.google.com --> www.google.com\nwww.google.com/item/ --> www.google.com\nwww.google.com?source=google --> www.google.com\nwww.google.com&source=google --> www.google.com\nhttp://google.com&source=google --> google.com\nhttps://www.example-code.com/vb/string.asp --> www.example-code.com\n
Run Code Online (Sandbox Code Playgroud)\n\n

我创建了这个正则表达式:

\n\n
REGEXP_EXTRACT('google.it?medium=cpc?cobranded=google&keywor\xe2\x80\x8c\xe2\x80\x8bd=foo';, r'//([^/|^?|^&]+)')\n
Run Code Online (Sandbox Code Playgroud)\n\n

但它仅适用于包含 的网址//,我无法获得一个//在网址中没有的情况下也适用的正则表达式。

\n

小智 6

BigQuery 提供以下三个功能:

HOST()——给定一个 URL,以字符串形式返回主机名。

DOMAIN()——给定一个 URL,以字符串形式返回域。

TLD()——给定 URL,返回顶级域以及 URL 中的任何国家/地区域。

  • BigQuery 现在使用 NET.HOST() 和 NET.REG_DOMAIN() 代替。 (9认同)

小智 6

对于任何寻找使用标准 SQL 的解决方案的人来说,该HOST()函数现在位于NET以下命名空间下NET.HOST(url): https: //cloud.google.com/bigquery/docs/reference/standard-sql/net_functions#nethost

WITH
  examples AS (
  SELECT "https://some.domain.com/path?query=param#hash" AS example
  UNION ALL
  SELECT "some.domain.com/path?query=param#hash" AS example)
SELECT
  NET.HOST(example)
FROM
  examples
Run Code Online (Sandbox Code Playgroud)

返回:

some.domain.com
some.domain.com
Run Code Online (Sandbox Code Playgroud)