包含一个单词但不包含另一个单词的字符串的正则表达式

我在谷歌分析中设定了一些目标,可能需要一些正则表达式的帮助。

假设我有4个 URL

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

我想创建一个表达式,将标识包含字符串 选择器 = 大小但不包含 详情的任何 URL

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

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

但是,我不确定如何添加 选择器 = 大小部分。

任何帮助都将不胜感激!

123260 次浏览

这个应该可以:

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

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

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

如果您的正则表达式引擎支持正数量词(尽管我怀疑 Google Analytics 不支持) ,那么我猜测这将在大输入集中表现得更好:

^[^?]*+(?<!details\.cfm).*?selector=size.*$

Regex 可以是(perl 语法) :

`/^[(^(?!.*details\.cfm).*selector=size.*)|(selector=size.*^(?!.*details\.cfm).*)]$/`

我正在寻找一种方法,以避免 --line-buffered在一个类似的情况下的尾巴作为 OP 和 Kobi 的解决方案工程伟大的我。在我的例子中,在包含 ' / '(对于我的根文档)的同时排除带有“ bot”或“ Spider”的行。

我最初的命令是:

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

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

tail -f mylogfile | grep -P '^(?!.*(bot|spider)).*\s\/\s.*$'

正则表达式在已接受的答案中有一个问题,它是 也吻合abcselector=sizeselector=sizeabc等等。

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

Regex101的正则表达式解释:

enter image description here