2009-12-13 15 views
18

string.sub sembra che sostituisca solo la prima istanza. C'è un'opzione per questo o un altro metodo che può sostituire tutti i modelli? Puoi farlo all'interno di un regex come perl?Come posso sostituire ogni istanza di un modello in rubino?

(credo qualcosa come r/bla/bla /)

... e uno a chi mi può dire perché sulla terra non string.sub sostituire solo la prima partita?

+1

Per la stessa ragione per cui Perl ha bisogno di un modificatore 'g' per rendere globali le sostituzioni. Sostituire tutto è spesso quello che vuoi, ma non sempre. – Telemachus

risposta

48

String.gsub dovrebbe fare il trucco.

documenti citare:

gsub(pattern, replacement) → new_str

restituisce una copia di str con i tutti occorrenza di modello sostituiti per il secondo argomento. Il pattern è tipicamente un Regexp ; se fornito come stringa, qualsiasi metacarattero di espressione regolare che contiene verrà interpretato letteralmente, ad es. \\d corrisponderà a una replica seguita da d, anziché una cifra.

+4

w00t. Grazie. Si penserebbe che sub lo farebbe come predefinito e quindi avrà un parametro int per sostituire le prime occorrenze N! – DJTripleThreat

+4

DJ: no non lo faresti. Se vuoi sostituire la prima partita, allora ** SUB ** stitute è la tua scelta, se non ** G ** lobal ** SUB ** stitute è la tua scelta. –

+0

Per ulteriori riferimenti, ecco la [pagina di manuale] (http://www.ruby-doc.org/core-2.1.1/String.html#method-i-gsub). –

5

ho potuto spiegare perché sub sostituisce solo la prima partita di un modello, ma penso che la documentazione lo fa molto meglio (dal ri String#sub sulla riga di comando):

str.sub(pattern, replacement)   => new_str 
str.sub(pattern) {|match| block }  => new_str 

Returns a copy of _str_ with the _first_ occurrence of _pattern_ 
replaced with either _replacement_ or the value of the block. 
+4

wow, sto usando rubino e rotaie da anni. Oggi è stata la prima volta che ho digitato qualcosa # metodo a causa del tuo post. Non avevo idea che la funzione fosse lì! Sono stato solo a cercare i termini e a trovare i documenti in questo modo. –

Problemi correlati