EscapeDiCaratteriSpeciali
Capita di aver bisogno di effettuare l’escape di alcuni caratteri in delle stringhe. (apici singoli o doppi, slasho backslash, etc..). Ad esempio, se l’output del vostro programma deve essere passato ad una shell, dovrete aggiungere un “\” davanti a quei simboli. Per la soluzione e’ ovvio che bisogna usare String#gsub(), e per fare le cose in modo chiaro useremo la sintassi di gsub che accetta un blocco:
stringa.gsub(/[caratteri]/)
stringa.gsub(/[caratteri]/) { |match||match| "\\"+match"\\"+match }
in pratica tutto questo significa: sostituisci ogni carattere contenuto tra le parentesi quadre con il risultato del blocco.
Il blocco prende in input ogni carattere contenuto tra le parentesi quadre,
e gli aggiunge una “\” davanti. Dobbiamo scriverne due per far capire a ruby che ne vogliamo una, come in tutti i limguaggi, anche qui abbiamo bisogno di escape :)
Se invece volessimo raddoppiare i caratteri scriveremmo:
stringa.gsub(/[carat]/)
stringa.gsub(/[carat]/) { |match||match| match*2 }
(questo e’ utile, ad esempio, se usate la stringa all’interno di una chiamata a sprint o altre funzioni di formattazione di stringhe)
Notate anche che se volete rimpiazzare un singolo carattere vi basterebbe scrivere:
stringa.gsub(/c/)
stringa.gsub(/c/) { |match||match| match*2 }
Un tipico esempio di come fare l’escape di apici per usare una stringa in una shell:
str.gsub(/['"]/)
str.gsub(/['"]/) { |match||match| match*2match*2 }