正则表达式UTM谷歌

时间:2018-06-27 20:31:02

标签: r regex utm

我正在尝试使用从Google链接中提取UTM,但是我的正则表达式似乎无法正常工作。

以下是Google链接的示例:

xxx/yyy?utm_medium=display&utm_source=ogury&utm_campaign=TOTO&zzz=coco

我尝试了以下正则表达式来提取TOTO

.+&utm_campaign=([[a-z]]+)&.+

没有成功。

如果有人可以帮助,谢谢!

4 个答案:

答案 0 :(得分:1)

在您的模式中,[[a-z]]+是格式错误的括号表达式,因为它匹配[[a-z]括号表达式中的任何字符(任何小写ASCII字母或[),然后匹配一个或多个]个字符。您打算在此处使用单个[]

您可以将sub与以下正则表达式配合使用:

sub(".*[&?]utm_campaign=([^&]+).*", "\\1", s)

请参见regex demo

详细信息

  • .*-任意0个以上的字符,并且尽可能多
  • [&?]-一个?&
  • utm_campaign=-文字子字符串
  • ([^&]+)-捕获第1组:除&字符以外的一个或多个字符
  • .*-任意0个以上的字符,并且尽可能多

\1是替换后向引用,它将第1组的内容放入结果中。

请参见R demo

s <- "xxx/yyy?utm_medium=display&utm_source=ogury&utm_campaign=TOTO&zzz=coco"
sub(".*[&?]utm_campaign=([^&]+).*", "\\1", s)
## => [1] "TOTO"

答案 1 :(得分:0)

您可以使用:

(?:&utm_campaign=)(\w+)

并使用捕获的第一组

Try it Online

答案 2 :(得分:0)

您正在搜索[[a-z]]+,但是TOTO是大写的,因此不在'a'和'z'之间。您可以将其更新为[[A-Za-z]]+以匹配任何大小写字母。

编辑[[A-Za-z]]+将匹配任何大小写字母,但也匹配任何'['或']'字符。如果您不希望匹配这些字母,则可以将其更改为[A-Za-z]+以仅匹配任何大小写字母

答案 3 :(得分:0)

这是一个正则表达式字符串,无论其在查询字符串中的位置如何,它都将与utm_campaign参数的值匹配。

(?<TOTO>(?<=utm_campaign=).*?(?=&|$))

说明:

  • ?<TOTO>在执行正则表达式后将结果捕获到TOTO密钥中

  • (?<=utm_campaign=)是一种后置形式,可以确保该值前面带有utm_campaign=

    • .*?将找到参数值(即TOTO)。 ?的原因是延迟评估-它只会搜索直到匹配下一个规则(请参阅下面的要点)

    • (?=&|$)是一种前向匹配,将匹配&或字符串的结尾(如果utm_campaign是最后一个参数)