En résumé, non. Le regex de Vim est une saveur unique, et il n'y a pas d'options pour le faire se comporter plus comme une autre saveur.
Je pense que c'est une bonne chose.
la magie
L' 'magic'
option ne change pas la saveur des expressions régulières utilisées par Vim. Il inverse simplement le comportement de nombreux \
atomes échappés.
Par exemple, par défaut, +
est un +
caractère littéral , où \+
signifie "un ou plusieurs des atomes précédents". En revanche, *
signifie "zéro ou plus de l'atome précédent", tandis que \*
est un littéral *
. Beaucoup de gens trouvent cela assez déroutant. L'utilisation \v
dans votre modèle le rend un peu plus cohérent. :help 'magic'
donne un bon résumé:
after: \v \m \M \V matches ~
'magic' 'nomagic'
$ $ $ \$ matches end-of-line
. . \. \. matches any character
* * \* \* any number of the previous atom
() \(\) \(\) \(\) grouping into an atom
| \| \| \| separating alternatives
\a \a \a \a alphabetic character
\\ \\ \\ \\ literal backslash
\. \. . . literal dot
\{ { { { literal '{'
a a a a literal 'a'
Personnellement, je pense que le comportement par défaut est agréable pour les fichiers de code, où il n'est pas rare de rechercher des choses comme foo(
, en utilisant le littéral (
.
Saveur regex propre à Vim
J'ai vu de nombreuses personnes souhaiter que Vim soutienne PCRE. Personnellement, je souhaite que d'autres outils prennent en charge la saveur des expressions régulières de Vim. Il a certaines capacités qui sont soit impossibles soit trop lourdes à réaliser dans PCRE.
Impossible dans PCRE
Le lookaround est une fonctionnalité courante où vous pouvez affirmer qu'un modèle correspond ou ne correspond pas avant ou après le modèle que vous essayez de faire correspondre. Par exemple, le modèle PCRE q(?!u)
(ou modèle d'expression régulière Vim qu\@!
) correspond à un q
qui n'est pas suivi par un u
. (C'est plus correct que q[^u]
, ce qui nécessite qu'il y ait du caractère après le q
.)
Aspect négatif de longueur variable
PCRE, et beaucoup d'autres saveurs, ont une restriction selon laquelle un motif de lookbehind négatif doit être d'une longueur fixe. Cela signifie qu'un modèle comme (?<![a-z]{3})foo
, signifiant "la chaîne foo
non précédée d' exactement 3 lettres minuscules") est correct, mais (?<![a-z]+)foo
(signifiant "la chaîne foo
non précédée d' un nombre quelconque de lettres minuscules") ne l'est pas.
Cette restriction n'existe pas dans Vim. Dans Vim, un modèle comme \([a-z]\+\)\@<!foo
, bien que peut-être un peu moche à regarder, est parfaitement valide.
Plus facile dans Vim regex
Certaines choses sont beaucoup plus agréables dans la saveur des expressions régulières de Vim.
Ancres de début et de fin de match
Les plus notables, à mon avis, sont les ancres \zs
et \ze
. Ceux-ci vous permettent de spécifier le début et la fin du match. Par exemple, foo(\zs.*\ze)
ne correspond qu'à ce qui se trouve entre le (
et )
dans un appel de fonction comme foo(...)
. Cela peut être fait dans PCRE, mais cela nécessite l'utilisation de lookaround, ce qui est légèrement fastidieux:(?<=foo\().*(?=\))
Correspondance de préfixe
Une autre chose intéressante que Vim peut faire est de faire correspondre n'importe quel préfixe (y compris le préfixe vide) d'une séquence particulière de caractères. Par exemple, pour correspondre à f
, fo
, foo
ou food
, le modèle f\%[ood]
peut être utilisé. Dans PCRE, un tel modèle ressemblerait f(o(od?)?)?
. (Imaginez cela pour une chaîne plus longue!)
Correspondance des positions du curseur, de la ligne et de la colonne
L'expression régulière de Vim a quelques ancres pour faire correspondre les positions dans le tampon.
\%23c
correspond à la colonne 23
\%<23c
correspond avant la colonne 23
\%>23c
correspond après la colonne 23
\%16l
correspond à la ligne 16
- Semblable à la colonne, il existe des ancres pour avant ou après un numéro de ligne
\%#
correspond à la position du curseur
Je pense que cela vaut la peine d'embrasser la saveur des regex de Vim. Il est bien adapté pour une utilisation dans un éditeur de texte utilisé principalement pour la programmation, et il est assez puissant.
\v
inclut les<>
limites des mots, ce qui AFAIK est unique à Vim. Alors non, décrivez-les simplement comme "regex de Vim". (Ne pas poster comme réponse parce que je ne suis pas positif)