Les expressions regulars (regex) són una eina potent per treballar amb cadenes de text. Permeten buscar, coincidir i manipular patrons de text de manera eficient. En Ruby, les expressions regulars són objectes de la classe Regexp.

Conceptes Clau

Sintaxi Bàsica

Una expressió regular es defineix entre barres inclinades (/). Per exemple:

/patró/

Caràcters Especials

Els caràcters especials tenen significats específics en les expressions regulars:

  • .: Coincideix amb qualsevol caràcter excepte una nova línia.
  • *: Coincideix amb zero o més repeticions del caràcter anterior.
  • +: Coincideix amb una o més repeticions del caràcter anterior.
  • ?: Coincideix amb zero o una repetició del caràcter anterior.
  • \d: Coincideix amb qualsevol dígit (equivalent a [0-9]).
  • \w: Coincideix amb qualsevol caràcter de paraula (lletres, dígits i guions baixos).
  • \s: Coincideix amb qualsevol caràcter d'espai en blanc (espai, tabulador, nova línia).
  • ^: Coincideix amb el començament de la cadena.
  • $: Coincideix amb el final de la cadena.

Grups i Captures

Els parèntesis () s'utilitzen per agrupar parts d'una expressió regular i per capturar coincidències:

/(abc)/ # Coincideix amb "abc" i captura la coincidència.

Classes de Caràcters

Les classes de caràcters permeten definir un conjunt de caràcters que poden coincidir en una posició determinada:

  • [abc]: Coincideix amb qualsevol dels caràcters a, b o c.
  • [a-z]: Coincideix amb qualsevol lletra minúscula.
  • [^abc]: Coincideix amb qualsevol caràcter excepte a, b o c.

Utilització en Ruby

Creació d'Expressions Regulars

Les expressions regulars es poden crear utilitzant la sintaxi /patró/ o el constructor Regexp.new:

regex = /patró/
regex = Regexp.new("patró")

Mètodes de Coincidència

Ruby proporciona diversos mètodes per treballar amb expressions regulars:

  • =~: Retorna la posició de la primera coincidència o nil si no hi ha coincidència.
  • match: Retorna un objecte MatchData amb informació sobre la coincidència.
  • scan: Retorna un array amb totes les coincidències.

Exemple:

cadena = "Hola, món!"

# Utilitzant =~
if cadena =~ /món/
  puts "Coincidència trobada!"
end

# Utilitzant match
coincidencia = cadena.match(/món/)
puts coincidencia[0] if coincidencia

# Utilitzant scan
coincidencies = cadena.scan(/\w+/)
puts coincidencies.inspect

Substitució i Manipulació

Els mètodes sub i gsub s'utilitzen per substituir coincidències en una cadena:

  • sub: Substitueix la primera coincidència.
  • gsub: Substitueix totes les coincidències.

Exemple:

cadena = "Hola, món!"

# Utilitzant sub
nova_cadena = cadena.sub(/món/, "univers")
puts nova_cadena # "Hola, univers!"

# Utilitzant gsub
nova_cadena = cadena.gsub(/\w+/, "paraula")
puts nova_cadena # "paraula, paraula!"

Exercicis Pràctics

Exercici 1: Validació d'Adreces de Correu Electrònic

Escriu una expressió regular per validar adreces de correu electrònic.

Solució:

def validar_correu(correu)
  regex = /\A[\w+\-.]+@[a-z\d\-.]+\.[a-z]+\z/i
  correu =~ regex ? "Adreça vàlida" : "Adreça no vàlida"
end

puts validar_correu("[email protected]") # Adreça vàlida
puts validar_correu("exemple@domini")     # Adreça no vàlida

Exercici 2: Extracció de Números de Telèfon

Escriu una expressió regular per extreure números de telèfon d'un text.

Solució:

def extreure_telefons(text)
  regex = /\b\d{3}[-.\s]?\d{3}[-.\s]?\d{4}\b/
  text.scan(regex)
end

text = "Contacta'ns al 123-456-7890 o al 987.654.3210."
puts extreure_telefons(text).inspect # ["123-456-7890", "987.654.3210"]

Resum

Les expressions regulars són una eina poderosa per treballar amb cadenes de text en Ruby. Hem après la sintaxi bàsica, els caràcters especials, els grups i captures, les classes de caràcters i com utilitzar-les en Ruby per a la coincidència, substitució i manipulació de text. Els exercicis pràctics proporcionats ajuden a consolidar aquests conceptes.

© Copyright 2024. Tots els drets reservats