2014-09-13 5 views
0

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

p.e.
Входной

whatever text text and more text 
test 2 12000 text and more text 
text and text 
text 3 text more text 
1-2000 and more text 

шаблон поиска:

let @/ = '^test \zs2 \d\d\d\d\d\s.*\n\(.*\n\)\{-}text 3\ze' 

(соответствие с непосредственно перед '2' до только после того, как '3')

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

ожидается выход

________________________________ 
_____2 text and more text 
text and text 
text 3_______________ 
_____________ 

Я использую это регулярное выражение, которое отлично работает, но не работает, если есть несколько строк в шаблоне поиска:

exe "%s/\\(@/\\)\\zs\\|./\\=submatch(1)!=''?'':'_'/g" 

Как я могу сделать его работу также с несколько строк в шаблоне поиска?

ответ

2

модифицирующий альфа браво и адаптации к Vim:

:%s/\(2\_.*3\)*[^\r\n]/\1_/g 

Если сделать трюк.

Ключ здесь \_., который соответствует любому персонажу, включая символы новой строки.
Что является эквивалентом /s в PCRE

+1

голосование за адаптацию и ссылку на мое решение –

1

Используйте этот шаблон (2.*3)*[^\r\n] с gs опциями и заменить раствором $1_
Demo

+0

Не понимаю, что вы пишете. Ваше решение, похоже, не в vimscript, не так ли? – Reman

+0

Нет, это не так, это в PCRE, но я думал, что вы начнете, если сможете его перевести. –

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