正则表达式PCRE捕获URL中的多次出现查询字符串

我正在尝试捕获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标签的查询字符串。

预期结果是以下URL:

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标签的

我们将不胜感激。

a436084592 回答:正则表达式PCRE捕获URL中的多次出现查询字符串

您可以像这样使正则表达式获得组结果:

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

,

您可以用空字符串替换任何不匹配的参数。的模式是

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

这是一个有效的证明:https://regex101.com/r/L5xcl4/2仅具有一个额外的\s,因此它可以在测试器中的多行输入中使用,但是您不需要它,因为您将在处理字符串仅包含不带空格的URL。

本文链接:https://www.f2er.com/3075436.html

大家都在问