[Regex] 包含一个单词而不是另一个单词的字符串的正则表达式


Answers

这应该做到这一点:

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

^.*selector=size.*$应该足够清楚。 第一位, (?!.*details.cfm)是一个负面预见:在匹配字符串之前,它会检查字符串不包含“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部分。

任何帮助将不胜感激!




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

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

^[^?]*+(?<!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.*$'



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

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



简单的做法是通过执行以下操作来指定字符串的0个实例

(string_to_exclude){0}