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. Rispondi #

in alcuni casi (come quello dell’articolo) fanno molto comodo

by Nss on gennaio 3, 2010 at 9:59 pm. Rispondi #

Lascia un commento

Required.

Required. Not published.

If you have one.