2015-07-27 4 views
0

Я пытаюсь настроить подсветку синтаксиса в Vim. Используя регулярные выражения, я не могу найти символ между двумя последовательностями символов.Найти текст между двумя ключевыми словами с помощью VIM Regex

Последовательность:

facebook&sdk_version=7.2.3&appid=34428&language=en_AR&screen_height=1136&app_version=7.2.3&apple_idfa 

Я хотел бы, чтобы захватить часть между, например "sdk_version=" и "&appid=". Значение 7.2.3

Есть идеи?

+0

Гарантируется ли, что версия skd появится прямо перед приложением? Вам, вероятно, лучше хватать число, которое приходит после интересующего объекта: /sdk_version=(\d+\.\d+\.\d+)/ – ajwood

+0

Что гарантируется, так это после sdk_version = будет & – archipestre

+0

Is что вы хотите зафиксировать значение между * each * '='/'&' pair, а не только значением 'sdk_version'? –

ответ

3

Как о чем-то вроде этого:

sdk_version=\zs\d\+\.\d\+\.\d\+ 

Все до \zs будет необходимо, чтобы соответствовать, но не будет рассматриваться часть матча.

Тогда ваш фактический матч будет состоять из трех цифр, разделенных точками.

Другой вариант не будет хватать все после того, как 'sdk_version =' до следующего амперсанд:

sdk_version=\zs[^&]* 
+0

он не работает – archipestre

+0

Вы сделали ': set hlsearch'? – ajwood

+0

Второй совершенен. большое спасибо – archipestre

0

Чтобы соответствовать все значения:

=\zs[^&]\+\ze& 

или

=\zs[^&]\+ 

(The сначала RE требует, чтобы после последнего значения было &, т. е. последний компонент должен быть av alueless, как в вашем примере.)

Оба варианта запрещают пустые значения: поскольку цель была подсветкой, я предположил, что пустые значения не представляли интерес. Замените * на номер \+, чтобы разрешить им.