对于Google Analytics漏斗,我想编写一个regEx,将URL与以下pti-ids匹配:
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,它们可以以任何顺序出现在变量中。有可能吗?
您需要"单词边界"regex b
:
.*OrderConfirmation.*pti=.*b(1|5|8|13|14|49|79)b.*
使用单词boundary表示id 1与|17|不匹配。
查看各种边缘案例的rubular上的实时演示。
您需要转义管道,因为它们是正则表达式中的保留符号
.*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`匹配,后面跟任何东西。如果你想允许其他参数(并不总是存在),你需要这个:
.*OrderConfirmation.*pti=(1|1|16)($|&.*)
这意味着第一个表达式后面可以跟字符串的末尾,也可以跟&
后面跟着任何东西。