Я пытаюсь использовать регулярные выражения для замены текста в файле (заменить полный URL-адрес просто протокол / домен /):
:%s/\(https\?:\/\/.*?\/\).*/\1/gc
К сожалению .*?
не совпадает строка, даже пытаясь уйти от ?
квантификатора? Как избежать использования жадного квантификатора в vim?
regular-expression
Гвидо
источник
источник
:help greedy
взял бы вас к правильной теме справки.:help regexp
справка, описывающая вкус регулярных выражений Vim.Ответы:
В регулярном выражении Vim есть специальный синтаксис для нежадных версий операторов (это немного раздражает, но вы просто должны запомнить их): http://vimregex.com/#Non-Greedy
Нежадная версия
*
есть\{-}
. Итак, просто замените.*
на.\{-}
:источник
Я предпочитаю всегда разбивать проблему на два этапа:
Использование очень магического «\ v», чтобы избежать многих обратных слешей, ссылки на последний поиск в подстановке и изменение разделителя подстановки. Все эти изменения делают код более читабельным.
источник
Вы также можете использовать
[^\]+/.
для предотвращения жадности.[^/]
означает «соответствует чему-либо ожидаемому»/
и+
повторяет это один или несколько раз.Если у меня есть
/
в регулярном выражении, я буду использовать!
в качестве разделителя, чтобы мне не пришлось бежать/
.пример
Предположим, у вас есть следующие URL:
Применяя замену, вы получите следующее:
источник