2013-10-05 2 views
2

Я хотел бы регулярное выражение VIM для поиска пар слов по выбору. Они могут быть разделены другими словами, но оба они должны быть на одной линии. Например, если я хотел, чтобы соответствовать открыть и закрыть, то они должны соответствовать:gvim регулярное выражение соответствует пару слов

open foo close 
open close 
foo 

и они не должны совпадать:

open foo 
open 
foo close 
close 

Я пытался использовать предпросмотр и назад ', чтобы соответствовать слова, но Я просто не могу найти правильную комбинацию.

Я знаю, как это сделать для одиночных символов, но слова полностью потеряли меня.

Вот попытка:

s/\(\(open\)\@=.*\(close\)\@=\)* 

За одно и то же, но с «а» и «с» вместо «открытым» и «закрыть» Я могу это сделать:

s/^\(a[^ac]*c\|[^ac]\)*$ 

Это бы выбрать все эти строки (и пустую строку):

acabcacabbbbcbbb 
ac 
abc 
b 

но не выберет

acbbc 
ab 
bc 
a 
c 

Это функциональность, которую я ищу, но со словами.

Любая помощь была бы принята с благодарностью.

Спасибо! Nachum

Редактировать: Я работаю над сценарием отступа, и это помогло бы. Вместо этого я закончил поиск и преобразование слов в отдельные буквы. Затем я использовал методы, с которыми я уже знаком, чтобы соответствовать одиночным символам. По крайней мере, он сокращает код после завершения первого преобразования.

+2

Вы должны приложить все усилия, даже если они не работают отлично. Это поможет людям понять, что вы пытаетесь сделать, и сообщить вам, что вы делаете неправильно ... Также люди любят видеть доказательства того, что вы попытались решить проблему самостоятельно. – smerny

+0

Обновлено моими собственными попытками. Спасибо что подметил это. – nachum

ответ

2

Просто найдите это:

open.*close 
+0

Это не соответствует «foo» (строка, не открытая или закрытая), поскольку OP выражает желание соответствовать. – smerny

0

Я считаю, что это то, что вы ищете.

^((?!.*open|.*close).*|.*open.*close.*)$ 

Перерывы вниз:

(?!.*open|.*close).* - ничего исключая открыть или закрыть
или
.*open.*close.* - что-то в том числе и открытый и близкий

Я не знаком с Vim, но из того, что вы показали, я думаю, вы похожи на то, что сможете преобразовать синтаксис.

Смежные вопросы