regex - 谷歌分析正则表达式 - 替代无负面前瞻

标签 regex google-analytics

谷歌分析不再允许在其过滤器中进行负前瞻。事实证明,创建仅包含我希望包含的链接的自定义报告非常困难。

包含负前瞻的正则表达式在启用时会起作用:

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/

相关文章:

c# - 拆分一个由前导数字和之后的所有内容组成的字符串

javascript - 将C#正则表达式转换为Javascript兼容变体

python - python 中的 while 循环只要正则表达式匹配

php - uploadData中的文件名Google Analytics(分析)

javascript - 将 Whatsapp Markdown 转换为 HTML 标签

php - 使用正则表达式查找和替换注释 block 中的(部分)字符串

javascript - 使用事件的轨道链接 - 竞赛条件

api - 如何在Google Analytics API上按日期时间过滤?

asp.net-mvc - 带有谷歌分析的 ASP.NET MVC 跟踪根 URL

javascript - 跟踪目录产品印象 - 增强型电子商务 Google Analytics