Restituisce una copia di str con tutte le occorrenze di pattern sostituite per il secondo argomento. Il pattern è tipicamente una Regexp; se dato come Stringa, qualsiasi metacaratteri di espressione regolare che contiene verrà interpretato letteralmente, ad esempio \d
corrisponderà a una barra rovesciata seguita da ‘d’, invece di una cifra.
Se replacement
è una Stringa, verrà sostituito il testo corrispondente. Può contenere riferimenti ai gruppi di acquisizione del modello del modulo \d
, dove d è un numero di gruppo, o \k<n>
, dove n è un nome di gruppo. Allo stesso modo, \&
, \'
, \`
, e +
corrispondono a variabili speciali, $&
, $'
, $`
, e $+
, rispettivamente. (Vedi regexp.rdoc per i dettagli.) è lo stesso di
\&
. \
è interpretato come una fuga, cioè una singola barra rovesciata. Si noti che, all’interno di replacement
le variabili di corrispondenza speciali, ad esempio $&
, non si riferiscono alla corrispondenza corrente.
Se il secondo argomento è un Hash e il testo abbinato è una delle sue chiavi, il valore corrispondente è la stringa sostitutiva.
Nel modulo di blocco, la stringa di corrispondenza corrente viene passata come parametro e variabili come ,
,
$`
, $&
, e $'
sarà impostato in modo appropriato. (Vedi regexp.rdoc per i dettagli.) Il valore restituito dal blocco sarà sostituito per la corrispondenza ad ogni chiamata.
Quando non viene fornito né un blocco né un secondo argomento, viene restituito un Enumeratore.
"hello".gsub(//, '*') #=> "h*ll*""hello".gsub(/()/, '<>') #=> "h<e>ll<o>""hello".gsub(/./) {|s| s.ord.to_s + ' '} #=> "104 101 108 108 111 ""hello".gsub(/(?<foo>)/, '{\k<foo>}') #=> "h{e}ll{o}"'hello'.gsub(//, 'e' => 3, 'o' => '*') #=> "h3ll*"
Si noti che una stringa letterale consuma barre rovesciate. (Vedi sintassi / letterali.rdoc per i dettagli sui letterali stringa.) I riferimenti posteriori sono in genere preceduti da una barra rovesciata aggiuntiva. Ad esempio, se si desidera scrivere un back-reference \&
in replacement
con una stringa letterale a due virgolette, è necessario scrivere: "..\&.."
. Se si desidera scrivere una stringa non-back-reference \&
in replacement
, è necessario prima sfuggire alla barra rovesciata per impedire a questo metodo di interpretarlo come un back-reference, e quindi è necessario sfuggire nuovamente alle barre rovesciate per impedire a una stringa letterale di consumarle: "..\\&.."
. Si consiglia di utilizzare il modulo di blocco per evitare un sacco di barre rovesciate.