2010-08-28 20 views

Respuesta

61

Se puede utilizar el método de exploración. El método de escaneo le dará una matriz de todas las coincidencias o, si pasa un bloque, pasará cada partido al bloque.

"hello1 hello2".scan(/(hello\d+)/) # => [["hello1"], ["hello2"]] 

"hello1 hello2".scan(/(hello\d+)/).each do|m| 
    puts m 
end 

que he escrito acerca de este método, se puede leer sobre él here cerca del final del artículo.

+5

No hay necesidad de hacer 'each'. Solo '.scan (...) {| m | ...}' – Nakilon

+2

Genial; un puntero adicional: si su expresión regular solo debe capturarse como un todo (sin subgrupos), omitir el encerramiento '()' le dará una matriz regular y plana. Si especifica al menos 1 subgrupo, obtendrá una matriz anidada (cuyos subarreglos NO incluyen la coincidencia completa, solo las capturas de subgrupo). – mklement0

6

Este es un consejo para cualquiera que esté buscando una forma de reemplazar todas las coincidencias de expresiones regulares por otra cosa.

En lugar del // indicador de g y un método de sustitución como en muchos otros idiomas, Ruby usa dos métodos diferentes en su lugar.

# .sub — Replace the first 
"ABABA".sub(/B/, '') # AABA 

# .gsub — Replace all 
"ABABA".gsub(/B/, '') # AAA 
Cuestiones relacionadas