VIM номера поиска, содержащие определенное количество цифр

23

Мне нужно найти цифры определенной длины в большом документе. Я пытался использовать регулярные выражения для этого. Например, если мне нужно искать номера с ровно 2 цифрами, я использую \d\d(то есть / d дважды с пробелом). Это хорошо работает.

Но для нахождения 10-значных чисел вводить \d10 раз не реально .

Пробовал \d{2}, говорит ' E486: шаблон не найден: \ d {2} '

Есть ли более быстрый / простой способ добиться этого?

холодный морской тропический воздух
источник

Ответы:

32

Существуют разные диалекты регулярных выражений; некоторые (например, Perl) не требуют обратной косой черты в модификаторе квантификации ( \d{2}), некоторые (например, sed) требуют двух (\d\{2\} ), а в Vim это нужно только открытому фигурному символу ( \d\{2}). Это печальное состояние несовместимых диалектов регулярных выражений.

Также обратите внимание, что для сопоставления точных чисел необходимо закрепить совпадение, чтобы оно \d\{2}не совпадало с цифрами ( 12) в 123. Это может быть сделано с негативным прогнозом и прогнозом :

\d\@<!\d\{2}\d\@!
Инго Каркат
источник
Отлично. Можете ли вы порадовать одним лайнером информацию о регулярном выражении? Было бы очень полезно. Спасибо
MTK
1
Для тех, кто борется с базовым синтаксисом регулярных выражений, просмотр вперед / назад довольно продвинут. Я, вероятно, не могу описать это лучше, чем встроенный :help /\@<!и :help /\@!. Не волнуйтесь, если не сразу все поймете; как я уже сказал, это довольно продвинутый.
Инго Каркат
Вы также можете поместить \vв начало регулярное выражение, если хотите избежать экранирования {, см. :help magicДополнительную информацию (это делает регулярное выражение vim немного более похожим на регулярное выражение perl, хотя есть и другие различия).
evilsoup
Большое спасибо: \d\{4}в Vi это вообще тривиально
installero
9

Попробуйте следующее:

\d\{2}

и вы должны использовать \ не/

Вы можете узнать больше о регулярном выражении vim на этом сайте или в vimс :help regular.

Рафаэль Аренс
источник
2

Экранирующие скобки работают: \d\{2\}

one_half_3544
источник
1

Не так красиво, но у меня получилось 5 цифр в лог-файле.

/\<\%(\d\d\d\d\d\)\>
theINtoy
источник
-1

Для таких, как я, попадающих на эту страницу просто для поиска шаблона, соответствующего любой длине цифр:

\d\+

(Мне потребовалось некоторое время, чтобы выяснить обязательное дополнительное экранирование \ перед +)

Кевин Лю
источник
+квантификатор обозначает 1 или более вхождений. Это регулярное выражение соответствует 1 или более вхождению цифр.
Гагансо