Question

Jolie question élémentaire, j'essaie d'écrire une expression rationnelle dans Vim pour qu'elle corresponde à toute phrase commençant par "abc " directement suivie d'un élément autre que "defg".

J'ai utilisé "[^defg]" pour rechercher tout caractère autre que d, e, f ou g.

Mon premier instinct a été d'essayer /abc [^\(defg\)] ou /abc [^\<defg\>] mais ni l'une ni l'autre de ces œuvres.

Était-ce utile?

La solution

Voici la chaîne de recherche.

/abc \(defg\)\@!

Le concept que vous recherchez s'appelle une affirmation d'anticipation négative. Essayez ceci dans vim pour plus d’informations:

:help \@!

Autres conseils

précédé ou suivi par?

Si tout ce qui commence par 'abc' n'est pas (immédiatement) suivi de 'defg', vous voulez La solution de bmdhacks .

Si tout ce qui commence par "abc" n'est pas (immédiatement) précédé de "defg", vous souhaitez une vision négative:

/\%(defg\)\@<!abc /

Cela correspondra à toute occurrence de 'abc' tant qu'elle ne fait pas partie de 'defgabc'. Voir :help \@<! pour plus de détails.

Si vous voulez faire correspondre "abc" tant qu'il ne fait pas partie de "defg. * abc", ajoutez simplement un .*:

/\%(defg.*\)\@<!abc /

La correspondance de 'abc' uniquement sur les lignes où 'defg' ne se produit pas est similaire:

/\%(defg.*\)\@<!abc \%(.*defg\)\@!/

Bien que, si vous ne faites que cela pour une substitution, vous pouvez faciliter cela en combinant :v// et :s//

:%v/defg/s/abc /<whatever>/g

Ceci remplacera "< quel que soit >" pour 'abc' sur toutes les lignes qui ne contiennent pas 'defg'. Voir :help :v pour plus d'informations.

Voilà, c'est un poilu:

/\%(\%(.\{-}\)\@<=XXXXXX\zs\)*

(remplacez XXXXXX par le mot recherché). Cela recherchera tout ce qui ne ne contient pas XXXXXX. J'imagine que si tu le faisais:

/abc \%(\%(.\{-}\)\@<=defg\zs\)*

Cela peut fonctionner comme vous le souhaitez. J'espère que cela aide un peu!

/ abc \ [^ d] [^ e] [^ f] [^ g]

C'est assez lourd pour les gros mots, mais ça marche comme un charme.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top