Wenn ich einen magischen Vim-Regex in einem String-Literal habe, gibt es eine Möglichkeit, den gesamten Regex in eine alternative Darstellung zu konvertieren, die einen anderen magischen Modus verwendet, sodass ich diesen entsprechenden Regex in den Quellcode einfügen kann?
Wenn ich zum Beispiel dieses Magic-Mode-Muster konvertieren möchte:
'\m-\=\<\d\+L\=\>\|0[xX][0-9a-fA-F]\+\>'
in den sehr magischen Modus, um es lesbarer zu machen, so etwas wie:
'\v-=<\d+L=>|0[xX][0-9a-fA-F]+>'
Ich mache oft Fehler, wenn ich versuche, sie von Hand umzuwandeln.
regular-expression
Mu Mind
quelle
quelle
[0-9]+
in einen nicht magischen zu verwandeln ... ;-)Antworten:
Der Befehl
sollte ausreichen, um fast jedes Muster in einen
\v
Modus umzuwandeln . Es wird den kleinen\m
Marker jedoch nicht austauschen - und meines Wissens ist dies mit einem einzigen Ersatz unmöglich. Es ist jedoch kurz genug, um manuell zu tippen, und dann können Sie es nur:s/\\m/\\v
für den Modus-Marker tun .\W
ist eine Abkürzung für[^a-zA-Z0-9_]
die (negierte) Menge von Zeichen, mit denen der sehr magische Modus arbeitet. Dadurch werden nur alle umgekehrten Schrägstriche unmittelbar vor einem dieser Zeichen gelöscht. Bekanntes Problem: Dies ersetzt\\
innere Zeichenketten bis\
. Sie könnten ersetzen\W
mit\c[^a-z0-9\_]
dieser zu mildern, aber es wird immer noch vermasselt Ihre regex wörtliche , wenn Sie es mehrmals ausgeführt und auch auf längere Flucht Saiten versagen (mit\\\\
zum Beispiel)Update: Die ursprüngliche Frage ist es nicht klar , ob Sie transformieren müssen ,
\v
um wieder\m
, aber der Befehl ist:quelle