使用正则表达式

时间:2016-11-23 19:30:05

标签: regex google-bigquery

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

假设我要解析的参数的键值等于" source"。解析应该:

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

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

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

非常感谢您的帮助!

2 个答案:

答案 0 :(得分:3)

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

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

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

答案 1 :(得分:1)

如果您需要从网址中提取所有参数,您还可以使用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):

BigQuery example