【问题标题】:Extract parameter from url in Google BigQuery using regex使用正则表达式从 Google BigQuery 中的 url 提取参数
【发布时间】:2017-04-07 22:47:55
【问题描述】:

我可以请求您的帮助,以便使用 REGEXP_EXTRACT 构建用于 Google Big Query 的正则表达式,该表达式将解析由特定键标识的 url 参数的值?

假设我要解析的参数的键值等于“源”。解析应该:

  • 确保键前有“?”或“&”,之后有一个“=”:所以在示例中匹配“?source =”或“&source =”
  • 捕获值直到第一个“&”或字符串结尾
  • 如果上述条件多次匹配,则应采用第一次出现的值

以下是一些所需行为的示例(它们都应提供“google”作为输出):

  • www.google.com?source=google&medium=cpc --> 输出:google
  • www.google.com?source=google --> 输出:google
  • www.google.com?medium=cpc&source=google --> 输出:google
  • www.google.com?medium=cpc&source=google&keyword=foo --> 输出:google
  • www.google.com?medium=cpc&source=google&keyword=foo&source=bing --> 输出:google
  • www.google.it?medium=cpc?source=goo-gle --> 输出:goo-gle
  • www.google.it?medium=cpc?source=google?med=cpc&keyword=foo --> 输出:google?med=cpc

非常感谢您的帮助!

【问题讨论】:

    标签: regex google-bigquery


    【解决方案1】:

    [?&]source=([^&]+)

    匹配中第一个捕获的组将是“源”参数的值。

    • [?&] ?&
    • source=文字文本
    • ([^&]+) 包含 1 个或多个非 & 字符的捕获组

    【讨论】:

    • 非常感谢这适用于所有示例!请问您理解仅使用 REGEXP_EXTRACT(url, r'[?&]source=([^&]+)') 有什么区别?似乎这在我的所有示例中也都可以正常工作,但是我想一定存在某些情况下它的表现会有所不同?你能把它提供给我以便完全理解吗?谢谢!马可
    • 抱歉——不确定问题所在。在您的情况下,\r\n 可能是可选的。这有帮助吗?
    • 那些是我在测试时添加的,我忘了把它们拿出来;P
    【解决方案2】:

    如果需要从URL中提取所有参数,也可以使用REGEXP_EXTRACT_ALL,如下:

    REGEXP_EXTRACT_ALL(query,r'(?:\?|&)((?:[^=]+)=(?:[^&]*))') as params
    

    (在此处发布是因为此问题在 Google 上的“bigquery parse url query string”排名很高,但所选答案仅适用于已定义的一个参数)。

    这会将结果作为数组返回(参见How to extract URL parameters as ARRAY in Google BigQuery):

    【讨论】:

    • 可能没有直接关系,但您将如何做到这一点一劳永逸?正如我想象的那样,每次查询数据时在所有日志上重新运行正则表达式并不是最有效的方法?
    猜你喜欢
    • 2017-04-08
    • 1970-01-01
    • 2021-12-16
    • 2021-05-21
    • 2018-11-28
    • 2016-03-21
    • 1970-01-01
    相关资源
    最近更新 更多