Note: Testo rimosso dalla rev 1  e Testo aggiunto nella rev2

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 }
Created on November 25, 2005 13:36 by il gruppo (256.256.256.256)