Комментарии 22
Рисовать [^>] было не обязательно, можно просто указать, что квантификатор нежадный.
Те, для кого статья написана, не знают, как это сделать. Расскажете?
/<.*?>/
/<.\{-}>/
Регексп со знаком вопроса в vim не работает!
Регексп со знаком вопроса в vim не работает!
За решение с вопросом в выражение спасибо. Ни как не мог найти его решение.
А можете немного расшифровать: почему у вас \ перед {. Как в RegExp / PCRE это разъяснить?
А можете немного расшифровать: почему у вас \ перед {. Как в RegExp / PCRE это разъяснить?
/<.\{-}>/
снимаю свой вопрос. нашел :) Очень не обычное решение
Скажите, почему на куче сайтов есть «я нашел решение», но нет самого решения? Может стоит всё же им поделиться?
Вы правы, исправляюсь:
В справке по vim в файле pattern.txt.gz написано интересное поведение {пределов} в скобках:
т.е. получается "-" (минус) заставит выбрать минимальное вхождение патерна (не знаю как правильно сказать на русском).
А зачем слеш пере скобкой — это зависит от того включена «магия» в VIM или нет. В этом я буду дальше разбираться.
В справке по vim в файле pattern.txt.gz написано интересное поведение {пределов} в скобках:
*/\{*
\{n,m} Выбрать n до m предыдущего выражения, как можно больше \{n} Выбрать n предыдущего выражения \{n,} Выбрать не меньще, чем n предыдущего выражения, как можно больше \{,m} Выбрать 0 до m предыдущего выражения, как можно больше \{} Выбрать 0 или больше предыдущего выражения, как можно больше (как *)
*/\{-*
\{-n,m} Выбрать n до m предыдущего выражения, как можно меньще \{-n} Выбрать n предыдущего выражения \{-n,} Выбрать не меньще, чем n предыдущего выражения, как можно меньще \{-,m} Выбрать 0 до m предыдущего выражения, как можно меньще \{-} Выбрать 0 или больше предыдущего выражения, как можно меньще
т.е. получается "-" (минус) заставит выбрать минимальное вхождение патерна (не знаю как правильно сказать на русском).
А зачем слеш пере скобкой — это зависит от того включена «магия» в VIM или нет. В этом я буду дальше разбираться.
> …если бы мне потребовалось бы решить одну из них, имея в руках текстовый редактор типа блокнота или, скажем, notepad++…
В notepad++ есть поддержка поиска и замены с использованием регулярных выражений. И в jEdit есть, и в Programmer's notepad — не стоит их обижать :) Регулярные выражения есть даже в стандартном диалоге поиска в OpenOffice, которые, кстати, бывают очень полезны при работе с безобразно отформатированными текстами и таблицами.
С регулярными выражениями в Vim у меня была одна проблема: их использовать приходится всё же не так часто, а возможности Vim, не используемые постоянно, имеют свойство через некоторое время забываться. Но стикеры у монитора всегда выручают.
В notepad++ есть поддержка поиска и замены с использованием регулярных выражений. И в jEdit есть, и в Programmer's notepad — не стоит их обижать :) Регулярные выражения есть даже в стандартном диалоге поиска в OpenOffice, которые, кстати, бывают очень полезны при работе с безобразно отформатированными текстами и таблицами.
С регулярными выражениями в Vim у меня была одна проблема: их использовать приходится всё же не так часто, а возможности Vim, не используемые постоянно, имеют свойство через некоторое время забываться. Но стикеры у монитора всегда выручают.
что-то ни слова про PCRE, а они зачастую привычнее
vim.wikia.com/wiki/Perl_compatible_regular_expressions
vim.wikia.com/wiki/Perl_compatible_regular_expressions
А подскажите, как удалить весь текст внутри тегов, а теги оставить?
Примного благодарен за развёрнутое описание, много раз нужно было заменить в коде что-то по маске, но на эксперементы небыло времени и боязнь просто запороть код побеждала, а тут всё расписанно :)
Поздравляю, вы открыли для себя регулярные выражения. Они есть практически везде, вим выделяется совсем не этим.
P.S. Эти скобки обычно называют не треугольными, а угловыми.
P.S. Эти скобки обычно называют не треугольными, а угловыми.
Спасибо, я бы сказал, Vim выделяется не только этим.
Угловыми скобками обычно называют несколько иные символы, об этом написано, в частности, в википедии.
Угловыми скобками обычно называют несколько иные символы, об этом написано, в частности, в википедии.
Кстати, как пример чем действительно выделяется vim — это возможность использования выражений при замене (:h sub-replace-expression). Например такая команда
:%s/\(\d\+\)/\=submatch(0)+1
увеличит все числа в тексте на единицу.
А про скобки в википедии ведь то же самое написано.
:%s/\(\d\+\)/\=submatch(0)+1
увеличит все числа в тексте на единицу.
А про скобки в википедии ведь то же самое написано.
По-моему, если задача состоит только в том, чтобы заменить в файле один шаблон на другой, лучше использовать не вим, а сед с теми же регулярными выражениями. Сед работает намного быстрее вима, особенно когда файл такой большой, что не влезает в память.
Вот если бы вимовские регэкспы совпадали по синтаксису с перловыми — было б куда лучше. А так — приходится каждый раз вспоминать, куда надо поставить \
Зарегистрируйтесь на Хабре, чтобы оставить комментарий
О заменах в Vim, использующих регулярные выражения