0

对于 Google Analytics 漏斗,我想编写一个正则表达式,将 URL 与以下 pti id 匹配:

1、5、8、13、14、49、79

例如,这些是有效的 URL

  • /OrderProcess/OrderConfirmation.aspx?pti=1
  • /OrderProcess/OrderConfirmation.aspx?pti=1|16
  • /OrderProcess/OrderConfirmation.aspx?pti=48|1|47
  • /OrderProcess/OrderConfirmation.aspx?pti=5|7|11

但这些不是:

  • /OrderProcess/OrderConfirmation.aspx?pti=16
  • /OrderProcess/OrderConfirmation.aspx?pti=2|16|51

此正则表达式匹配以数字开头但不匹配管道后数字的 URL:

.*OrderConfirmation.*pti=(1|5|8|13|14|49|79).*

有近 100 个 id,它们可以以任何顺序出现在变量中。可能吗?

4

2 回答 2

0

您需要“单词边界”正则表达式\b

.*OrderConfirmation.*pti=.*\b(1|5|8|13|14|49|79)\b.*

使用边界一词意味着 id 1 与 |17| 不匹配。

请参阅有关各种边缘情况的 rubular 的现场演示。

于 2013-07-24T22:57:01.170 回答
0

您需要转义管道,因为它们是正则表达式中的保留符号:

.*OrderConfirmation.*pti=(1|1\|16)

将匹配/OrderProcess/OrderConfirmation.aspx?pti=1/OrderProcess/OrderConfirmation.aspx?pti=1|16

(从这里开始添加其余部分应该很容易。)

请注意,如果您这样写:

.*OrderConfirmation.*pti=(1|1\|16).*

然后表达式将匹配.*OrderConfirmation.*pti=1或 .*OrderConfirmation.*pti=1|16`后跟any 。如果你想允许其他参数(并不总是存在),你需要这个:

.*OrderConfirmation.*pti=(1|1\|16)($|&.*)

这意味着第一个表达式可以跟在字符串的末尾,&也可以依次跟在任何内容后面。

于 2013-07-24T20:53:05.733 回答