使用mysql REGEXP_SUBSTR 在两个字符或字符串之间提取字符串

时间:2021-06-21 09:22:11

标签: mysql regex

我需要帮助来提取以下字符串。我尝试了很多解决方案,但这是最接近的。但仍然不是我所需要的。任何帮助表示赞赏。

示例网址:'https://mywebsite/path/?utm_source=google&utm_medium=cpc&gclid=123abc'

要求的结果:

<头>
utm_source utm_medium gclid
谷歌 每次点击费用 123abc

以下 gclid 示例为我提供了 gclid=123abc 结果,而我需要提取 123abc

SELECT l.url, REGEXP_SUBSTR(l.url, 'gclid=([^&]*)') as data
FROM mydatabase.mytable AS l
WHERE Date(l.registration_date) >= '2021-06-15'
AND REGEXP_SUBSTR(l.url, 'gclid=([^&]*)') is not null

我还需要解析另外两个字段,如 utm_source 和 utm_medium。

2 个答案:

答案 0 :(得分:2)

<块引用>
SET @URL := 'https://mywebsite/path/?utm_source=google&utm_medium=cpc&gclid=12345';
<块引用>
SELECT SUBSTRING_INDEX(SUBSTRING_INDEX(@URL, 'utm_source=', -1), '&', 1) utm_source,
       SUBSTRING_INDEX(SUBSTRING_INDEX(@URL, 'utm_medium=', -1), '&', 1) utm_medium,
       SUBSTRING_INDEX(SUBSTRING_INDEX(@URL, 'gclid=', -1), '&', 1) gclid;
<头>
utm_source utm_medium gclid
google 每次点击费用 12345

db<>fiddle here

答案 1 :(得分:1)

您可以在此处使用lookbehinds从您的匹配项中排除静态文本:

REGEXP_SUBSTR(l.url, '(?<=[?&]gclid=)[^&#]+')
REGEXP_SUBSTR(l.url, '(?<=[?&]utm_source=)[^&#]+')
REGEXP_SUBSTR(l.url, '(?<=[?&]utm_medium=)[^&#]+') 

看到一个 sample regex demo

详情

  • (?<=[?&]gclid=) - 匹配紧跟在 ?& 之前的位置(这确保我们只匹配完整的查询参数键)然后 {{1 }}
  • gclid= - 除 [^&#]+& 之外的一个或多个字符(使用并作为匹配值返回)。
相关问题