124

我正在 Google Analytics 中设定一些目标,并且可以使用一些正则表达式帮助。

假设我有 4 个网址

http://www.anydotcom.com/test/search.cfm?metric=blah&selector=size&value=1
http://www.anydotcom.com/test/search.cfm?metric=blah2&selector=style&value=1
http://www.anydotcom.com/test/search.cfm?metric=blah3&selector=size&value=1
http://www.anydotcom.com/test/details.cfm?metric=blah&selector=size&value=1

我想创建一个表达式来识别包含字符串selector=size但不包含details.cfm的任何 URL

我知道要找到一个不包含另一个字符串的字符串,我可以使用这个表达式:

(^((?!details.cfm).)*$)

但是,我不确定如何添加selector=size部分。

任何帮助将不胜感激!

4

5 回答 5

172

这应该这样做:

^(?!.*details\.cfm).*selector=size.*$

^.*selector=size.*$应该足够清楚。第一个位(?!.*details.cfm)是负前瞻:在匹配字符串之前,它会检查字符串不包含“details.cfm”(前面有任意数量的字符)。

于 2010-06-01T20:26:45.450 回答
4
^(?=.*selector=size)(?:(?!details\.cfm).)+$

如果您的正则表达式引擎支持姿势量词(尽管我怀疑 Google Analytics 不支持),那么我想这对于大型输入集会表现得更好:

^[^?]*+(?<!details\.cfm).*?selector=size.*$
于 2010-06-01T20:27:02.860 回答
3

正则表达式可以是(perl 语法):

`/^[(^(?!.*details\.cfm).*selector=size.*)|(selector=size.*^(?!.*details\.cfm).*)]$/`
于 2010-06-01T20:35:00.490 回答
0

接受的答案中的正则表达式存在问题。它也匹配 abcselector=sizeselector=sizeabc

一个正确的正则表达式可以是^(?!.*\bdetails\.cfm\b).*\bselector=size\b.*$

regex101正则表达式的解释:

在此处输入图像描述

于 2021-03-31T00:12:43.373 回答
-1

我一直在寻找一种方法来避免--line-buffered在类似情况下拖尾,因为 OP 和 Kobi 的解决方案对我很有用。在我的情况下,排除带有“bot”或“spider”的行,同时包括' / '(对于我的根文档)。

我原来的命令:

tail -f mylogfile | grep --line-buffered -v 'bot\|spider' | grep ' / '

现在变成(使用-Pperl 开关):

tail -f mylogfile | grep -P '^(?!.*(bot|spider)).*\s\/\s.*$'
于 2016-06-16T11:11:41.163 回答