En otros idiomas, puede usar // g para una concordancia global.Ruby global match expresiones regulares?
Sin embargo, en Ruby:
"hello hello".match /(hello)/
Sólo una captura hola
¿Cómo capturo toda hola?
En otros idiomas, puede usar // g para una concordancia global.Ruby global match expresiones regulares?
Sin embargo, en Ruby:
"hello hello".match /(hello)/
Sólo una captura hola
¿Cómo capturo toda hola?
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.
use String#scan
. Devolverá una matriz de cada coincidencia, o puede pasar un bloque y se llamará con cada coincidencia.
Todos los detalles en http://ruby-doc.org/core/classes/String.html#M000812
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
No hay necesidad de hacer 'each'. Solo '.scan (...) {| m | ...}' – Nakilon
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