Las expresiones regulares (regex) son una herramienta poderosa para la manipulación y validación de cadenas de texto. En Ruby, las expresiones regulares se utilizan ampliamente para buscar, reemplazar y validar patrones en cadenas. Este tema cubrirá los conceptos básicos de las expresiones regulares, su sintaxis en Ruby, y proporcionará ejemplos prácticos y ejercicios para reforzar el aprendizaje.

Conceptos Básicos de Expresiones Regulares

¿Qué es una Expresión Regular?

Una expresión regular es una secuencia de caracteres que define un patrón de búsqueda. Este patrón puede ser utilizado para realizar operaciones de búsqueda y manipulación en cadenas de texto.

Sintaxis Básica

En Ruby, las expresiones regulares se definen entre barras inclinadas (/). Por ejemplo:

/patrón/

Caracteres Especiales

Las expresiones regulares utilizan caracteres especiales para definir patrones complejos. Algunos de los más comunes son:

  • .: Coincide con cualquier carácter excepto una nueva línea.
  • *: Coincide con cero o más repeticiones del carácter anterior.
  • +: Coincide con una o más repeticiones del carácter anterior.
  • ?: Coincide con cero o una repetición del carácter anterior.
  • \d: Coincide con cualquier dígito.
  • \w: Coincide con cualquier carácter de palabra (letras, dígitos y guiones bajos).
  • \s: Coincide con cualquier espacio en blanco (espacios, tabulaciones, etc.).

Ejemplo Básico

# Coincide con cualquier cadena que contenga "ruby"
regex = /ruby/
puts "I love ruby programming".match?(regex)  # => true
puts "I love python programming".match?(regex)  # => false

Métodos de Expresiones Regulares en Ruby

match

El método match devuelve un objeto MatchData si encuentra una coincidencia, o nil si no la encuentra.

regex = /ruby/
result = "I love ruby programming".match(regex)
puts result  # => #<MatchData "ruby">

scan

El método scan devuelve todas las coincidencias en una cadena como un array.

regex = /\d+/
result = "My phone number is 123-456-7890".scan(regex)
puts result  # => ["123", "456", "7890"]

sub y gsub

El método sub reemplaza la primera coincidencia, mientras que gsub reemplaza todas las coincidencias.

regex = /\d+/
text = "My phone number is 123-456-7890"
puts text.sub(regex, 'XXX')  # => "My phone number is XXX-456-7890"
puts text.gsub(regex, 'XXX')  # => "My phone number is XXX-XXX-XXXX"

Ejemplos Prácticos

Validación de Email

email_regex = /\A[\w+\-.]+@[a-z\d\-.]+\.[a-z]+\z/i
email = "[email protected]"
puts email.match?(email_regex)  # => true

Extracción de Números de Teléfono

phone_regex = /\d{3}-\d{3}-\d{4}/
text = "Contact me at 123-456-7890 or 987-654-3210"
phones = text.scan(phone_regex)
puts phones  # => ["123-456-7890", "987-654-3210"]

Ejercicios Prácticos

Ejercicio 1: Validación de Códigos Postales

Escribe una expresión regular que valide códigos postales de 5 dígitos.

postal_code_regex = /^\d{5}$/
puts "12345".match?(postal_code_regex)  # => true
puts "1234a".match?(postal_code_regex)  # => false

Ejercicio 2: Reemplazo de Palabras

Reemplaza todas las ocurrencias de la palabra "foo" con "bar" en una cadena.

text = "foo is a placeholder, foo should be replaced"
puts text.gsub(/foo/, 'bar')  # => "bar is a placeholder, bar should be replaced"

Ejercicio 3: Extracción de Fechas

Extrae todas las fechas en formato dd-mm-yyyy de una cadena.

date_regex = /\b\d{2}-\d{2}-\d{4}\b/
text = "Important dates are 12-05-2021 and 23-11-2020"
dates = text.scan(date_regex)
puts dates  # => ["12-05-2021", "23-11-2020"]

Retroalimentación y Consejos

Errores Comunes

  • Olvidar los delimitadores: Asegúrate de encerrar tus expresiones regulares entre barras inclinadas (/).
  • No escapar caracteres especiales: Algunos caracteres tienen significados especiales en regex y deben ser escapados con una barra invertida (\).

Consejos Adicionales

  • Usa herramientas de prueba de regex: Existen muchas herramientas en línea que te permiten probar y depurar tus expresiones regulares.
  • Lee la documentación: La documentación oficial de Ruby y las guías de regex son recursos valiosos para aprender más sobre expresiones regulares.

Conclusión

En esta sección, hemos cubierto los conceptos básicos de las expresiones regulares en Ruby, incluyendo su sintaxis, métodos comunes y ejemplos prácticos. Las expresiones regulares son una herramienta poderosa para la manipulación de texto y, con práctica, pueden ser una adición valiosa a tu conjunto de habilidades de programación. En el próximo módulo, exploraremos conceptos avanzados de Ruby, como bloques, procs y lambdas.

© Copyright 2024. Todos los derechos reservados