2

我有 Apache 的日志,文件的每一行如下所示:

script.php?variable1=value1&variable2=value2&variable3=value3&.........................

我需要取出这部分字符串:

variable1=value1&variable2=value2

并忽略行的其余部分。我如何在 PowerGREP 中做到这一点?

我试过了:

variable1=(.*)&variable2=(.*)&

但是我在 value2 之后得到了其余的行。

请帮助我,对不起我的英语。

4

2 回答 2

1

与 Ed Cottrell 关于他的第二个示例所写的相反,第一个效果更好(即正确);这是因为如果子表达式value2为非贪婪,它匹配尽可能少的字符,即不匹配任何字符。


如果您不介意将&aftervalue2包含在匹配中,您也可以通过使子表达式value2为非贪婪来磨练您的尝试,以便它只扩展到下一个&

variable1=(.*)&variable2=(.*?)&
于 2016-03-30T08:06:05.817 回答
0

替换.[^&]并删除 final &,如下所示:

variable1=(.*)&variable2=([^&]*)

.将匹配它可以匹配的任何东西(基本上除了换行符之外的任何字符)。[^&],另一方面,只匹配不是 的字符&

为了获得更好的结果和更快的性能,您还可以.以相同的方式替换第一个并添加?(非贪婪限定符),如下所示:

variable1=([^&]*?)&variable2=([^&]*?)

这是一个工作演示

于 2016-01-21T23:31:57.050 回答