谷歌分析不再允许在其过滤器中进行负前瞻。事实证明,创建仅包含我希望包含的链接的自定义报告非常困难。
包含负前瞻的正则表达式在启用时会起作用:
test.com(\/\??index\_(.*)\.php\??(.*)|\/\?(.*)|\/|)+(\s)*(?!.)
这匹配:
test.com
test.com/
test.com/index_fb2.php
test.com/index_fb2.php?ref=23
test.com/index_fb2.php?ref=23&e=35
test.com/?ref=23
test.com/?ref=23&e=35
并且不匹配(应该如此):
test.com/ambassadors
test.com/admin/?signup=true
test.com/randomtext/
我正在寻找如何调整我的正则表达式以仍然保持相同的匹配,但不使用负前瞻。
谢谢!
最佳答案
Google Analytics 似乎不支持单行和多行模式,这对我来说很有意义。 URL 不能包含换行符,因此点是否与它们不匹配也没有关系,而且永远不需要 ^
和 $
匹配除整个字符串的开头和结尾之外的任何地方。
这意味着 (?!.)
在您的正则表达式中完全等同于 $
,它只在字符串的最后匹配(比如 \z
,在支持它的风格中)。由于这是正则表达式中唯一的前瞻,因此您永远不会遇到这个问题;你应该一直在使用 $
一直。
但是,您的正则表达式还有其他问题,主要是由于过度依赖 (.*)
.例如,它匹配这些字符串:
test.com/?^#(%)!*%supercalifragilisticexpialidocious
test.com/index_ecky-ecky-ecky-ecky-PTANG!-vroop-boing_rowr.php (ni! shh!)
...我很确定你不想要。 :P
试试这个正则表达式:
test\.com(?:/(?:index_\w+\.php)?(?:\?ref=\d+(?:&e=\d+)?)?)?\s*$
或更易读:
test\.com
(?:
/
(?:index_\w+\.php)?
(?:
\?ref=\d+
(?:
&e=\d+
)?
)?
)?
\s*$
出于说明目的,我对(例如)可以存在哪些参数、它们出现的顺序以及它们的值可以进行很多简化假设。我也想知道是否真的有必要匹配域(
test.com
)。我没有使用 Google Analytics(分析)的经验,但比赛不应该在域名之后立即开始(并 anchor 定)吗?你真的必须在最后允许空格吗?在我看来,正则表达式应该更像这样:^/(?:index_\w+\.php)?(?:\?ref=\d+(?:&e=\d+)?)?$
关于regex - 谷歌分析正则表达式 - 替代无负面前瞻,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13361680/