包含一个词而不是另一个字符串的正则表达式包含一个词而不是另一个字符串的正则表达式(Regular e

2019-05-10 11:24发布

我设置在谷歌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

我希望创建一个将标识包含字符串选择=大小 ,但不包含任何details.cfm URL的表达

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

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

但是,我不知道如何选择=份量增加。

任何帮助将不胜感激!

Answer 1:

这应该这样做:

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

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



Answer 2:

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

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


Answer 3:

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

如果您正则表达式引擎支持posessive量词(虽然我怀疑谷歌Analytics(分析)没有),那么我想这将执行对大输入集更好:

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


Answer 4:

我一直在寻找一种方式,以避免类似情况的OP和了Kobi的解决方案在尾部--line缓冲对我的伟大工程。 在我的情况不包括或者用“机器人”或“蜘蛛”线,而包括“/”(我的根文档)。

我原来的命令:

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

现在变成(具有 “-P” perl的开关):

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


Answer 5:

简单的方法来做到这一点是通过执行以下操作来指定字符串的0实例

(string_to_exclude){0}


文章来源: Regular expression for a string containing one word but not another