Expresiones Regulares en Ruby

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