Pull to refresh

Comments 22

Рисовать [^>] было не обязательно, можно просто указать, что квантификатор нежадный.
Те, для кого статья написана, не знают, как это сделать. Расскажете?
/<.\{-}>/
Регексп со знаком вопроса в vim не работает!
За решение с вопросом в выражение спасибо. Ни как не мог найти его решение.

А можете немного расшифровать: почему у вас \ перед {. Как в RegExp / PCRE это разъяснить?
/<.\{-}>/

снимаю свой вопрос. нашел :) Очень не обычное решение
Скажите, почему на куче сайтов есть «я нашел решение», но нет самого решения? Может стоит всё же им поделиться?
Вы правы, исправляюсь:

В справке по 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 или нет. В этом я буду дальше разбираться.
Пример:

Example of <b>bold</b> and <i>italic</i> text

pattern: /<.*>/ => выбирает => "<b>bold</b> and <i>italic</i>"
pattern: /<.{}>/ => выбирает => "<b>bold</b> and <i>italic</i>"
pattern: /<.{-}>/ => выбирает => "<b>bold</b>"
> …если бы мне потребовалось бы решить одну из них, имея в руках текстовый редактор типа блокнота или, скажем, notepad++…

В notepad++ есть поддержка поиска и замены с использованием регулярных выражений. И в jEdit есть, и в Programmer's notepad — не стоит их обижать :) Регулярные выражения есть даже в стандартном диалоге поиска в OpenOffice, которые, кстати, бывают очень полезны при работе с безобразно отформатированными текстами и таблицами.

С регулярными выражениями в Vim у меня была одна проблема: их использовать приходится всё же не так часто, а возможности Vim, не используемые постоянно, имеют свойство через некоторое время забываться. Но стикеры у монитора всегда выручают.
Да, я погорячился с notepad++. Так что последний абзац следует воспринимать как тираду не о том, какой notepad++ слабый, а о том, какой необразованный я :)
Да, вместо того, чтобы учить десяток edge-case'ов регулярных выражений в виме, надо делать :perldo
А подскажите, как удалить весь текст внутри тегов, а теги оставить?
Сам же и отвечу:)
:%s/>.\{-\}</></g
Примного благодарен за развёрнутое описание, много раз нужно было заменить в коде что-то по маске, но на эксперементы небыло времени и боязнь просто запороть код побеждала, а тут всё расписанно :)
Поздравляю, вы открыли для себя регулярные выражения. Они есть практически везде, вим выделяется совсем не этим.
P.S. Эти скобки обычно называют не треугольными, а угловыми.
Спасибо, я бы сказал, Vim выделяется не только этим.
Угловыми скобками обычно называют несколько иные символы, об этом написано, в частности, в википедии.
Кстати, как пример чем действительно выделяется vim — это возможность использования выражений при замене (:h sub-replace-expression). Например такая команда
:%s/\(\d\+\)/\=submatch(0)+1
увеличит все числа в тексте на единицу.
А про скобки в википедии ведь то же самое написано.
Упс, что-то я не так написал. Должно быть так:
:%s/\d\+/\=submatch(0)+1/g
По-моему, если задача состоит только в том, чтобы заменить в файле один шаблон на другой, лучше использовать не вим, а сед с теми же регулярными выражениями. Сед работает намного быстрее вима, особенно когда файл такой большой, что не влезает в память.
Вот если бы вимовские регэкспы совпадали по синтаксису с перловыми — было б куда лучше. А так — приходится каждый раз вспоминать, куда надо поставить \
Sign up to leave a comment.

Articles