Regex 用于Google Analytics的正则表达式:基于字符串中附加的分隔id值匹配URL

Regex 用于Google Analytics的正则表达式:基于字符串中附加的分隔id值匹配URL,regex,google-analytics,Regex,Google Analytics,对于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/OrderConfi

对于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,它们可以以任何顺序出现在变量中。可能吗?

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

.*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)($|&.*)
这意味着第一个表达式后面可以跟字符串的结尾,或者后面可以跟任何东西。

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

.*OrderConfirmation.*pti=.*\b(1|5|8|13|14|49|79)\b.*
使用单词boundary表示id 1与| 17 |不匹配


请参阅各种边缘情况的详细说明。

感谢mzedeler,我忘了提到有将近100个ID,它们可以以任何顺序出现在变量中。这意味着可能会有大量的组合,而且据我所知,我需要编写大量的潜在组合来逃离管道。在这种情况下,您面临的问题就完全不同了。我将相应地更新我的答案。谢谢,这很好,但它不匹配URL,如:/OrderProcess/OrderConfirmation.aspx?pti=22 | 5 | 7 | 11,其中id 5不是第一个。这需要匹配以任何顺序出现的所有ID。@user2616169我添加了一个链接到一个在线演示,显示正则表达式匹配和不匹配是正确的。正如演示所示,事实上,它确实匹配id 5不是第一个的位置。