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


Answers

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

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

我在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部分。

任何帮助将不胜感激!




我正在寻找一种方法来避免 - 在线路上缓冲 - 在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.*$'



Links