ruby - regulares - Unir todas las apariciones de una expresión regular
ruby regex validator (3)
Para encontrar todas las cadenas coincidentes, utilice el método de scan
de String
clase String
.
str = "A 54mpl3 string w1th 7 numb3rs scatter36 ar0und"
str.scan(//d+/)
#=> ["54", "3", "1", "7", "3", "36", "0"]
Si prefiere que MatchData
que es el tipo de objeto devuelto por, match
método de las clases Regexp
, use lo siguiente
str.to_enum(:scan, //d+/).map { Regexp.last_match }
#=> [#<MatchData "54">, #<MatchData "3">, #<MatchData "1">, #<MatchData "7">, #<MatchData "3">, #<MatchData "36">, #<MatchData "0">]
La ventaja de tener MatchData
es que puedes usar métodos como el offset
match_datas = str.to_enum(:scan, //d+/).map { Regexp.last_match }
match_datas[0].offset(0)
#=> [2, 4]
match_datas[1].offset(0)
#=> [7, 8]
Consulte estas preguntas también si desea saber más.
¿Cómo obtengo los datos de coincidencia para todas las apariciones de una expresión regular de Ruby en una cadena?
Enumerador de coincidencia de expresiones regulares de Ruby con soporte de captura con nombre
Cómo averiguar el punto de partida para cada partido en ruby
Leer sobre las variables especiales $&
, $''
, $1
, $2
en ruby será muy útil.
¿Hay una forma rápida de encontrar todas las coincidencias de una expresión regular en Ruby? He buscado en el objeto Regex en Ruby STL y busqué en Google sin éxito.
Si tienes una expresión regular con grupos:
str="A 54mpl3 string w1th 7 numbers scatter3r ar0und"
re=/(/d+)[m-t]/
Utiliza el método de escaneo de cadenas para encontrar grupos coincidentes:
str.scan re
#> [["54"], ["1"], ["3"]]
Para encontrar el patrón a juego:
str.to_enum(:scan,re).map {$&}
#> ["54m", "1t", "3r"]
El uso de la scan
debería hacer el truco:
string.scan(/regex/)