En Ruby, una expresión regular se define utilizando barras inclinadas (/). Aquí tienes un ejemplo sencillo:
pattern = /ruby/
Este patrón busca la cadena "ruby". Puedes utilizar métodos como match, =~, y scan para trabajar con estas expresiones regulares.
Para verificar si una cadena coincide con un patrón, puedes usar el método match:
pattern = /ruby/
text = "Aprendiendo ruby es divertido"
match_data = pattern.match(text)
puts match_data # => #<MatchData "ruby">
El método =~ devuelve la posición de la primera coincidencia, o nil si no se encuentra ninguna coincidencia:
text = "Aprendiendo ruby es divertido"
puts text =~ /ruby/ # => 11
puts text =~ /python/ # => nil
Las expresiones regulares en Ruby pueden tener modificadores para cambiar su comportamiento. Algunos de los más comunes son:
i: Ignora mayúsculas y minúsculas.
m: Permite que el . coincida con nuevas líneas.
x: Ignora espacios en blanco y permite comentarios dentro de la expresión regular.
Ejemplo:
pattern = /ruby/i
text = "Aprendiendo Ruby es divertido"
puts pattern.match(text) # => #<MatchData "Ruby">
Puedes agrupar partes de una expresión regular y capturarlas para su posterior uso:
pattern = /(ruby|python)/
text = "Estoy aprendiendo ruby y python"
matches = text.scan(pattern)
puts matches # => [["ruby"], ["python"]]
Las capturas se pueden acceder a través de variables especiales como $1, $2, etc.:
pattern = /(ruby|python)/
text = "Estoy aprendiendo ruby y python"
if pattern =~ text
puts "Primer lenguaje: #{$1}" # => Primer lenguaje: ruby
end
El método sub reemplaza la primera coincidencia, mientras que gsub reemplaza todas las coincidencias:
text = "Estoy aprendiendo ruby y ruby es divertido"
puts text.sub(/ruby/, 'Python') # => Estoy aprendiendo Python y ruby es divertido
puts text.gsub(/ruby/, 'Python') # => Estoy aprendiendo Python y Python es divertido
Las expresiones regulares pueden volverse muy complejas y permiten el uso de cuantificadores, anclas y clases de caracteres. Algunos ejemplos:
*, +, ?, {n,m}):
pattern = /ru*y/
puts pattern.match("ruy") # => #<MatchData "ruy">
puts pattern.match("ruuuuy") # => #<MatchData "ruuuuy">
^, $):
pattern = /^ruby$/
puts pattern.match("ruby") # => #<MatchData "ruby">
puts pattern.match(" ruby ") # => nil
\d, \w, \s, [^abc]):
pattern = /\d{3}-\d{3}-\d{4}/
text = "Mi número es 123-456-7890"
puts pattern.match(text) # => #<MatchData "123-456-7890">
x) cuando sea necesario.
Las expresiones regulares en Ruby son una herramienta versátil y poderosa para trabajar con texto. Desde tareas simples como la búsqueda de patrones hasta operaciones complejas de validación y sustitución, las expresiones regulares pueden facilitar significativamente la manipulación de datos. Practicar y experimentar con diferentes patrones te ayudará a dominar su uso y aplicar estas técnicas de manera efectiva en tus proyectos de Ruby.
Jorge García
Fullstack developer