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