2009-12-13 9 views
18

string.sub parece que solo reemplaza la primera instancia. ¿Hay alguna opción para eso u otro método que pueda reemplazar todos los patrones? ¿Puedes hacerlo dentro de una expresión regular como perl?¿Cómo puedo reemplazar cada instancia de un patrón en rubí?

(creo que algo así como r/bla/bla /)

... y +1 a cualquier persona que me puede decir qué en la tierra no string.sub reemplazar sólo el primer partido?

+1

Por la misma razón por la que Perl necesita un modificador 'g' para hacer sustituciones globales. Reemplazar todo es a menudo lo que quiere, pero no siempre. – Telemachus

Respuesta

48

String.gsub debería hacer el truco.

docs postular:

gsub(pattern, replacement) → new_str

devuelve una copia de str con los todos ocurrencias de patrón sustituidos por el segundo argumento. El patrón es típicamente un Regexp; si se proporciona como una Cadena, cualquier metacaraculo de expresión regular que contiene se interpretará literalmente, p. \\d coincidirá con una reacción de seguido de d, en lugar de un dígito.

+4

w00t. Gracias. ¡Podrías pensar que sub haría eso por defecto y luego tiene un parámetro int para reemplazar las primeras N apariciones! – DJTripleThreat

+4

DJ: no, no lo harías. Si quiere reemplazar la primera coincidencia, entonces ** SUB ** es su elección, si no es así ** G ** lobal ** SUB ** es su elección. –

+0

Para mayor referencia, aquí está la [página del manual] (http://www.ruby-doc.org/core-2.1.1/String.html#method-i-gsub). –

5

Podría explicar por qué sub simplemente reemplaza el primer partido de un patrón, pero creo que la documentación lo hace mucho mejor (de ri String#sub en la línea de comandos):

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

guau, he estado usando ruby ​​y rieles durante años. Hoy fue la primera vez que escribí el método ri something # debido a su publicación. ¡No tenía idea de que la función estaba allí! Solo busqué en Google los términos y encontré los documentos de esa manera. –

Cuestiones relacionadas