2016-01-21 16 views
2

我的Apache日誌和文件的每一行類似:PowerGREP - 正則表達式

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

我需要拿出字符串的這一部分:

variable1=value1&variable2=value2 

而忽略行的其餘部分。我如何在PowerGREP中做到這一點?

我想:

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

但我值2之後得到線休息。

請幫助我,對不起我的英語。

回答

0

更換.[^&]拖放最終&,就像這樣:

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

.將匹配任何它可以(除換行符任何字符,基本上)。另一方面,[^&]僅匹配不是&的字符。

爲了更好的效果和更快的性能,也可以取代第一.以同樣的方式,並添加?(非貪婪預選賽),像這樣:

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

這裏有一個working demo

1

與Ed Cottrell關於他的第二個例子所寫的相反,第一個例子效果更好(即正確)。這是因爲如果value2的子表達式變得非貪婪,它將盡可能少地匹配字符i。即沒有。


如果你不介意列入比賽value2&,你還可通過使子表達式爲value2非貪婪磨練你的嘗試,使之只延伸到下一&

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