Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/silverlight/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Regex 包含一个单词但不包含另一个单词的字符串的正则表达式_Regex_Google Analytics_Regex Negation - Fatal编程技术网

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

Regex 包含一个单词但不包含另一个单词的字符串的正则表达式,regex,google-analytics,regex-negation,Regex,Google Analytics,Regex Negation,我正在Google Analytics中设定一些目标,可能需要一些regex帮助 假设我有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/s

我正在Google Analytics中设定一些目标,可能需要一些regex帮助

假设我有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
我想创建一个表达式,用于标识任何包含字符串selector=size但不包含详细信息的URL。cfm

我知道要查找不包含其他字符串的字符串,可以使用以下表达式:

(^((?!details.cfm).)*$)
但是,我不确定如何添加selector=size部分

任何帮助都将不胜感激

这应该可以做到:

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

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

^[^?]*+(?<!details\.cfm).*?selector=size.*$
^[^?]*+(?正则表达式可以是(perl语法):


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

我最初的命令:

tail -f mylogfile | grep --line-buffered -v 'bot\|spider' | grep ' / '
现在变成(使用
-p
perl开关):


接受答案中的正则表达式有问题。它
abcselector=size
selector=sizeabc

正确的正则表达式可以是
^(?。*\b详细信息\.cfm\b)。*\b选择符=size\b.*$

正则表达式的解释如下:


这假设
selector=size
总是在
细节之前。cfm
,这不是上一个url中的情况。为了澄清这一点,不是我。我不明白为什么有人会在这里投票否决两个答案,它们都是正确的。@Kobi:这应该是一个前瞻性的,更正了。哦,顺便说一下,我不怀疑这是你做的wn-vote.FYI,请查看一个测试这些表达式的好方法。永远不要考虑负面前瞻,它非常有用
”http://www.anydotcom.com/test/search.cfm?metric=blah&selector=sized&value=1“=~/^(?。*details\.cfm)。*selector=size.*$/#=>0
不正确。(注意字符串中包含
“…selector=size…”
)还有,为什么在结尾处出现“
*$
”?这是一个损坏的正则表达式,方括号将所有模式序列转换为单个字符的组合。虽然您没有错,但最初接受的正则表达式满足了我的需要,因为您的示例不存在于可能的字符串集中。
`/^[(^(?!.*details\.cfm).*selector=size.*)|(selector=size.*^(?!.*details\.cfm).*)]$/`
tail -f mylogfile | grep --line-buffered -v 'bot\|spider' | grep ' / '
tail -f mylogfile | grep -P '^(?!.*(bot|spider)).*\s\/\s.*$'