Объяснение регулярного выражения для vim - PullRequest
6 голосов
/ 29 июня 2009

Если мне нужны все строки с текстом «ruby», но не «myruby», то это то, что я бы сделал.

:g/\<ruby\>/

У меня вопрос, что означает здесь значение «меньше» и «больше, чем символ»? Единственное регулярное выражение, которое я использовал, - это программирование на ruby.

Точно так же, если я хочу найти три последовательные пустые строки, то это то, что я бы сделал

/^\n\{3}

У меня вопрос, почему я избегаю первой фигурной скобки (открывающей фигурной скобки), но не избегаю второй фигурной скобки (закрывающей фигурной скобки)?

Ответы [ 3 ]

16 голосов
/ 29 июня 2009

Правила Vim для экранирования обратной косой черты в регулярных выражениях не согласованы. Вы должны экранировать открывающую скобку \{...}, но [...] вообще не требует выхода, а группа захвата - \(...\) (экранирование как открытой, так и закрытой пары) Есть и другие несоответствия.

К счастью, Vim позволяет вам изменить это поведение даже на основе регулярных выражений через настройки magic. Если вы поместите \v в начале регулярного выражения, правила выхода станут более последовательными; все "волшебно", кроме цифр, букв и подчеркиваний, поэтому вам не нужно использовать обратную косую черту, если вы не хотите вставить буквальный символ, отличный от этих.

Ваш первый пример становится :g/\v<ruby>/, а второй - /\v^\n{3}. См. :h /magic и :h /\v для получения дополнительной информации.

13 голосов
/ 29 июня 2009

\< и \> означают границы слов. В Perl, grep и less (на имя 3 OTOH) вы используете \b для этого, поэтому я думаю, что в Ruby то же самое.

Относительно вашего второго вопроса, для всего выражения {3} нужен выход. Вы не спасаетесь от каждой фигурной скобки, а скорее от всего этого вместе.

Подробнее см. .

0 голосов
/ 29 июня 2009

Для вашего первого регулярного выражения вы также можете сделать:

:g/[^\ ]ruby\ /

Это обеспечит пробел до и после вашего ключевого слова ruby.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...