Una expresión regular es simplemente una manera de especificar un patrón de caracteres que se ajustaran a una cadena.
En Ruby, se suele crear una expresión regular escribiendo un patrón entre los caracteres de barra inclinada (/patrón/).
Y en Ruby, como es Ruby, las expresiones regulares son objetos y se pueden manipular como tal.
Ejemplo de un patrón que coincida con una cadena que contiene el texto Java o Javascript
/Java|Javascript/
// –> Delimitan el patron
| –> Significa o bien la cosa a la derecha o bien la cosa a la izquierda
/J(ava|avascript)/
\s –> Espacio en Blanco, Tabulador, Nueva Linea…
\S –> Cualquiera que no sea Espacio en Blanco….
\d –> Cualquier digito
\D –> Cualquiera que no sea un digito
\w –> Cualquier letra o Numero(caracter)
\W–> Cualquiera que no sea una letra o Numero(caracter)
. –> Casi cualquier caracter
/\d\d:\d\d:\d\d/ # Tipo reloj --> 12:34:56 /Java.*Javascript/ # Java, cero o mas caracteres y Javascript /Java Javascript/ #Java, un espacio y Javascript /Java *Javascript/ #Java, cero o más espacios y Javascript /Java +Javascript/ #Java, uno o más espacios y Javascript /Java\s+Javascript/ #Java, espacio en blanco y Javascript /Aprendiendo (Java|Javascript)/ #Aprendiendo, espacio en blanco, y Java o Javascript
Formas de Crear Expresiones Regulares
a = Regexp.new(‘^\s*[az]’) #--> /^\s*[az]/ b = /^\s*[az]/ #--> /^\s*[az]/ c = %r{^\s*[az]} #--> /^\s*[az]/
Uso de la Expresión Regular en Ruby
Para usarlo se utiliza el operador ( =~ )
El operador compara la cadena con la expresión regular:
- Si se encuentra el patrón en la cadena –> Devuelve la posición inicial
- Si no se encuentra el patrón –> Devuelve nil.
frase = "0123456789Java" expresion_regular = /Java|Javascript/ macheo = frase =~ expresion_regular if macheo puts "Se encuentro la palabra '#{expresion_regular.match(frase)}' en la frase '#{frase}' en la posicion -->" + (frase =~ expresion_regular).to_s end
Métodos de Sustitución
frase = "Java0123456789Java" expresion_regular = /Java|Javascript/ macheo = frase =~ expresion_regular if macheo #SUB nueva_frase_cambiando_solo_la_primera_aparicion = frase.sub(expresion_regular, "Ruby") puts nueva_frase_cambiando_solo_la_primera_aparicion #--> Ruby0123456789Java #GSUB nueva_frase_cambiando_todas_las_apariciones = frase.gsub(expresion_regular, "Ruby") puts nueva_frase_cambiando_todas_las_apariciones #--> Ruby0123456789Ruby end
Coincidencia, Antes de Coincidencia y despues de Coincidencia con $
El operador de comparación =~ retorna la posición de carácter en la que se produjo la comparación
expresion_regular_ejemplo = /a/ texto = "Hola, ¿que paso?" macheo = texto =~ expresion_regular_ejemplo previo_coincidencia = "#{$`}" coincidencia = "#{$&}" post_coincidencia = "#{$'}" puts previo_coincidencia puts coincidencia puts post_coincidencia