2009-10-23 3 views
2

J'ai un document texte comme ceci:Quel est le problème avec mon REGEX lors de l'utilisation de l'éditeur VI?

<table width="10"> 
</table> 

J'ouvre le document avec l'éditeur VI. Je veux remplacer toutes les instances de width = "somenumber" par rien. J'émets cette commande dans l'éditeur VI:

:0,$s/width="[\d]+"//gc 

VI dit aucun motif trouvé. J'ai aussi essayé cela et il doens't travail:

0,$s/width="[0-9]+"//gc 

Celui-ci ci-dessous travaillé:

:0,$s/width="\d\d"//gc 

Quel est le problème avec mes deux premières expressions?

Répondre

5

Vous avez deux erreurs dans votre expression rationnelle!

D'abord, utilisez \d sans [] s autour. Vous le mélangez probablement avec des classes de caractères telles que :alpha:, :digit:, etc.

Ensuite, écartez le signe +. Par défaut, vous devriez y échapper.

Ainsi, votre regexp serait:

:0,$s/width="\d\+"//gc 

Et, s'il vous plaît, lisez l'aide avant de poster sur stackoverflow:

:h :s 

Vous pourriez également être intéressé par cette aide:

:h magic 
1

Vous voulez:

:0,$s/ width="\d\+"//gc 

\d n'est pas reconnu dans une classe de caractères (ou plutôt, il est reconnu que la lettre d), et + sans une barre oblique inverse n'est pas reconnu comme métacaractère par vim ' s BRE. Vous voulez aussi probablement que l'espace avant width soit éliminé.

+0

Je viens d'essayer et il ne dit aucun motif trouvé 0, $ s/width = "[0-9] +" // gc – John

+0

Que diriez-vous juste de supprimer le crochets? – UncleO

+0

: 0, $ s/width = "\ d +" // gc – UncleO

0

Il ne fonctionnera qu'avec des largeurs de deux chiffres, n'est-ce pas?

Questions connexes