numéros de recherche vim contenant un nombre spécifique de chiffres

23

J'ai besoin de trouver des numéros de longueur spécifiques dans un gros document. J'ai essayé d'utiliser l'expression régulière pour cela. Par exemple, si je dois rechercher des nombres avec exactement 2 chiffres, j'utilise \d\d(ie / d deux fois suivi d'un espace). Cela fonctionne bien.

Mais pour trouver des nombres à 10 chiffres, il n'est pas vraiment possible de taper \d10 fois.

Essayé \d{2}, dit ' E486: motif introuvable: \ d {2} '

Existe-t-il un moyen plus rapide / plus simple d'y parvenir?

mtk
la source

Réponses:

32

Il existe différents dialectes d'expression régulière; certains (par exemple Perl) ne nécessitent pas de barres obliques inverses dans le modificateur de quantification ( \d{2}), certains (par exemple sed) nécessitent deux ( \d\{2\}), et dans Vim, seule l'ouverture bouclée en a besoin ( \d\{2}). C'est le triste état des dialectes d'expression régulière incompatibles.

Notez également que pour faire correspondre des nombres exacts , vous devez ancrer la correspondance afin qu'elle \d\{2}ne corresponde pas aux chiffres ( 12) de 123. Cela peut être fait avec un regard négatif et un regard en avant :

\d\@<!\d\{2}\d\@!
Ingo Karkat
la source
Parfait. Pouvez-vous s'il vous plaît une seule information sur le regex? Serait vraiment utile. Merci
mtk
1
Pour quelqu'un qui a du mal avec la syntaxe de l'expression rationnelle de base, le look-behind / ahead est assez avancé. Je ne peux probablement pas le décrire mieux que le intégré :help /\@<!et :help /\@!. Ne vous inquiétez pas si vous ne comprenez pas tout de suite; comme je l'ai dit, c'est assez avancé.
Ingo Karkat du
Vous pouvez également mettre \vau début de l'expression rationnelle si vous souhaitez éviter d'avoir à échapper à la {, voir :help magicpour plus d'informations (cela fait que vge regex se comporte un peu plus comme perl regex, bien qu'il y ait encore des différences).
evilsoup
Merci beaucoup: \d\{4}à Vi c'est un peu banal
installero
9

Essayez ce qui suit:

\d\{2}

et vous ne devez \pas utiliser/

Vous pouvez en savoir plus sur l'expression régulière de vim sur ce site ou vimavec :help regular.

Raphael Ahrens
la source
2

Échapper les crochets fonctionne: \d\{2\}

one_half_3544
la source
1

Pas aussi joli, mais cela a fonctionné pour moi à 5 chiffres dans un fichier journal.

/\<\%(\d\d\d\d\d\)\>
theINtoy
la source
-1

Pour quelqu'un comme moi qui atteint cette page simplement pour chercher un motif correspondant à n'importe quelle longueur de chiffres:

\d\+

(Il m'a fallu un certain temps pour comprendre l'échappement supplémentaire obligatoire \ avant +)

Kevin Liu
la source
+quantificateur signifie 1 occurrence ou plus. Cette expression régulière correspond à une ou plusieurs occurrences de chiffres.
gaganso