Regex on Vim (spiegazione)
da admin il gennaio 3, 2010
Questo post è stato fatto per spiegare la regex del post precedente…
Da prima vi consiglio di guardare questo piccolo vademecum [1] (in inglese).
Vediamo quindi meglio l’espressione…
%s/RSTRING(\(.*\))->\(ptr\|len\)/RSTRING_\U\2\E(\1)/
si spiegheranno mano a mano i pezzi evidenziati in rosso…
%s/stringadacercare/stringadasostituire/g
il costrutto di cui sopra è il comando per la sostituzione (%s) globale (g).
Vim cercherà quindi ogni stringa del tipo “stringadacercare” e la sostituirà con la “stringadasostituire”.
Stringa da Cercare
RSTRING(\(.*\))->\(ptr\|len\)
Questa parte è abbastanza semplice, vengono trovate tutte le stringhe che iniziano con RSTRING(, hanno una qualsiasi sequenza di caratteri seguiti da )->, a sua volta seguito da ptr o da len.
Manca la parte di:
RSTRING(\(.*\))->\(ptr\|len\)
Di base le parentesi precedute dallo \ servono per raggruppare più stringhe in una sola.
Es:
\(ptr\|len\)
qui le stringhe da trovare vengono racchiuse tra “\( \)” e separate da “\|” e il match naturalmente viene effettuato solamente su una delle due stringhe.
Nel caso delle sostituzioni però le \( \) svolgono un ulteriore funzione, tutti i caratteri che verranno riconosciuti tra le parentesi saranno salvati e potranno essere riutilizzati per la sostituzione.
Verranno cioè creati i seguenti “collegamenti”:
- \1 -> per la prima coppia di \( \)
- \2 -> per la seconda coppia di \( \)
e cosi via fino a \9.
Sarà ora quindi più chiaro il significato degli \1 e \2 nella stringa da sostituire..
Stringa da Sostituire
RSTRING_\U\2\E(\1)
Qui non facciamo altro che dire a Vim di sostituire le stringhe trovate con la stringa RSTRING_, seguita da ciò che contenevano la seconda coppia di \( \), seguita a sua volta la stringa contenuta nella prima coppia di \( \) racchiusa tra parentesi.
Ci manca ora solo questa parte:
RSTRING_\U\2\E(\1)
ma se avete letto la pagina che vi ho consigliato, saprete che tutto ciò che è racchiuso tra \U e \E viene reso maiuscolo.
Fine.
Sono stato abbastanza criptico?? :D
[1] http://www.softpanorama.org/Editors/Vimorama/vim_regular_expressions.shtml
2 commenti
wow, il discorso \1 e \2 e del maiuscolo non lo conoscevo. Ma forse è perché uso poco e niente vim
by ugaciaka on gennaio 3, 2010 at 8:18 pm. #
in alcuni casi (come quello dell’articolo) fanno molto comodo
by Nss on gennaio 3, 2010 at 9:59 pm. #