【问题标题】:Regex PCRE capture multiple occurences query string in URL正则表达式 PCRE 在 URL 中捕获多次出现的查询字符串
【发布时间】:2020-03-14 16:19:17
【问题描述】:

我正在尝试捕获 URL 中多次出现的 utm 标记,并在重写 url 时追加。但是我只想要 utm 键值并跳过其他键值。

这是一个示例网址

https://example.com/dl/?screen=page&title=SABC&page_id=4063&myvalue=Noidea&utm_source=sourceTest19&utm_medium=mediumTest19&utm_campaign=campaignTest19&utm_term=termTest19&test=value&utm_content=contentTest19

我试过了:

(\?.*)(page_id=([^&]*))(\?|&)(.*[&?]utm_[a-z]+=([^&]+).*)

不幸的是,它并没有产生我期望的结果。

我需要同时捕获 PAGE ID 和 utm 标签,但不想要 test=valuemyvalue=Noidea 并且只想要带有 utm 标签的查询字符串。

预期结果是以下网址:

https://example.com/dl/page_id/4063?utm_source=sourceTest19&utm_medium=mediumTest19&utm_campaign=campaignTest19&utm_term=termTest19&utm_content=contentTest19

一组pageid=<somenumber/text>
一组包含所有带有键和值的 utm 标签

我们将不胜感激。

【问题讨论】:

    标签: regex pcre varnish


    【解决方案1】:

    您可以用空字符串替换任何与所需参数匹配的参数。这个模式是

    (?:[?&](?!(?:page_id|utm_[^=&]++)=)[^&]*+)++$|(?<=[?&])(?!(?:page_id|utm_[^=&]++)=)[^&]*+(?:&|$)
    

    这是一个工作证明:https://regex101.com/r/L5xcl4/2 它只有一个额外的 \s,所以它适用于测试器中的多行输入,但你不应该需要它,因为你将处理一个只包含一个没有空格的网址。

    【讨论】:

      【解决方案2】:

      您可以像这样制作正则表达式来获取组结果:

      (?:(page_id|utm_[a-z]+)=[A-z0-9]+)(?:^\&amp;)?

      【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-10-14
      • 1970-01-01
      • 1970-01-01
      • 2014-11-07
      • 2012-04-24
      相关资源
      最近更新 更多