2009-11-05 5 views
0

Imaginez, nous devons construire une expression rationnelle dans vi/vim. Quels personnages spéciaux devons-nous échapper avec une barre oblique inverse?Vim regexps du point de vue de perl: quels caractères spéciaux pour échapper avec backslash

Par caractères spéciaux, je veux dire les caractères suivants: {} |() - [] + *.^$?

On dirait que nous devons nous échapper: {|() +?

Et laisser tel quel:}^$ * [] -

Merci..

p.s. AFAIK, nous n'avons pas de '?' caractère dans vi/vim mais '=' à la place qui devrait aussi être échappé par une barre oblique inverse.

+0

'\?' Et '\ =' font le même travail. Si vous activez le mode * très magique *, alors ".?" Signifiera * un ou aucun caractère *. – ZyX

Répondre

2

En vim:

: aider la magie

+0

Merci! Les Vimers les appellent 'magie' :) – igorp1024

3

Je pense que la documentation Vim sur magic characters vous donnera une liste définitive.

1

Je pense que la façon la plus simple, qui fonctionnera indépendamment du réglage de vim magic, est

let re = '\V' . escape(fixed_string, '\') 

\V désactive la magie entièrement ce point en avant dans le RE. Cela signifie que tout ce qui n'est pas précédé d'un seul antislash (bien, techniquement par un nombre impair de barres obliques inverses) est un caractère normal. Puisque nous échappons aux barres obliques inverses dans la chaîne fixe, il ne peut contenir aucun caractère magique. Rappelez-vous que, avec \V en vigueur, vous devez utiliser un préfixe backslash pour tous les méta-caractères RE. Donc, si vous êtes à la recherche d'une ligne qui se compose entièrement de la chaîne fixe, vous

let full_line_re = '\V\^' . escape(fixed_string, '\') . '\$' 

Gardez à l'esprit que ignorecase et smartcase les paramètres de vim auront une incidence sur le comportement RE. Les commutateurs \C (sensibles à la casse) et \c (insensibles à la casse) fonctionnent de la même manière que \V: ils remplaceront ces paramètres pour la partie de toute expression rationnelle qui les suit.

+1

Un ajout à cette réponse: vous pouvez même utiliser le modèle suivant: '\ v ^. + (\ VCeci n'est pas un méta-caractère:. \ V) +'. Ici, l'utilisation est similaire à '\ Q' ...' \ E' en Perl. – ZyX

+0

Pour l'option 'ignorecase' prioritaire, vous pouvez aussi utiliser '= ~ #' et '= ~?' Si vous voulez une correspondance de modèle. Dans les autres cas, vous devez fournir '\ c' ou' \ C'. – ZyX

Questions connexes