Un llenguatge compacte per descriure patrons de text i fer-hi cerca, validació o extracció.
Definició
Una regex (o expressió regular) és una seqüència de símbols que descriu un patró de text. S’utilitza per trobar, validar, substituir o extreure fragments dins de cadenes en multitud de llenguatges (p. ex., Python, JavaScript, R, Java, PHP).
Per què és útil
- Validació: correus, telèfons, codis postals.
- Neteja de dades: normalitzar formats, eliminar soroll.
- Extracció: captar grups rellevants (dates, imports, etiquetes).
- Substitució massiva: refactors de codi, reescriptura de logs.
Sintaxi bàsica
.qualsevol caràcter (excepte salt de línia per defecte)\ddígit;\wcaràcter de paraula;\sespai en blanc- Quantificadors:
*0+,+1+,?0 o 1,{m,n}rang - Àncores:
^inici,$final - Classes:
[abc]qualsevol d’aquests;[^abc]qualsevol excepte - Grups:
(...)capturant;(?:...)no capturant;(?<nom>...)amb nom - Alternança:
a|b - Flags: p. ex.
i(case-insensitive),m(multilínia),g(global, JS),s(dotall)
Exemples
Python
import re
text = "Contacta: hello@example.com i sales@shop.co"
pattern = r"[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,}"
# Trobar totes les coincidències
emails = re.findall(pattern, text)
print(emails) # ['hello@example.com', 'sales@shop.co']
# Capturar grups amb nom (usuari i domini)
m = re.search(r"(?<user>[A-Za-z0-9._%+-]+)@(?<domain>[A-Za-z0-9.-]+\.[A-Za-z]{2,})", text)
if m:
print(m.group("user"), m.group("domain"))
# Substitució
anon = re.sub(pattern, "[email]", text)
print(anon)JavaScript
const text = "SKU: AB-12345 i AB-98765";
const re = /\bAB-(\d{5})\b/g;
const ids = [...text.matchAll(re)].map(m => m[1]);
console.log(ids); // ["12345","98765"]
// Validació bàsica de data (YYYY-MM)
const isYearMonth = /^\d{4}-(0[1-9]|1[0-2])$/.test("2025-10");
console.log(isYearMonth); // trueErrors habituals i bones pràctiques
- Gourmandesa:
.*és golafre; usa quantificadors “mandrosos”.*?quan calgui. - Escapat: recorda escapar meta-caràcters (
.,+,?,(,),[,],{,},^,$,|,\). - Legibilitat: per a patrons llargs, comenta’ls (flags com
re.VERBOSEa Python) o trenca’ls en parts. - Rendiment: evita patrons amb backtracking explosiu; prefereix classes i àncores clares.
- Internacionalització: per a lletres amb accents o Unicode, activa modes/llibreries que ho respectin.