2016-01-21 8 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

Вопреки тому, что Эд Коттрелл написал о своем втором примере, первый работает лучше (то есть правильно); это потому, что если подвыражение для value2 сделано не жадным, оно соответствует как можно меньше символов, т.е. е. нет.


Если вы не возражаете, имеющим & после value2 включенных в матче, вы могли бы, а отточить попробовать, сделав подвыражению для value2 нежадных, так что она распространяется только на следующий &:

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