Guía completa de expresiones regulares para uso profesional (multilingüe y multilinea)

Qué es esto (What)

Este artículo es una referencia técnica completa sobre el uso de expresiones regulares con alta portabilidad. Cubre sintaxis, coincidencia en múltiples líneas, técnicas de reemplazo, compatibilidad entre herramientas y diseño de patrones mantenibles.

Por qué es importante (Why)

Las expresiones regulares son fundamentales para validación, análisis, transformación y extracción de texto. Se utilizan en casi todos los lenguajes de programación y plataformas. Un uso correcto permite automatización eficiente y preparación de datos precisa.


Parte 1: Sintaxis básica

Patrón Significado Ejemplo Coincidencias
. Cualquier carácter excepto salto de línea a.c abc, a-c
* Repetición de 0 o más veces del carácter previo go*gle ggle, google
+ Repetición de 1 o más veces del carácter previo go+gle gogle, google
? 0 o 1 vez del carácter anterior colou?r color, colour
{n} Repite exactamente n veces a{3} aaa
{n,m} Repite entre n y m veces a{2,4} aa, aaa, aaaa
^ Inicio de línea ^abc Línea que empieza con abc
$ Fin de línea abc$ Línea que termina en abc
[] Uno de los caracteres especificados [abc] a, b, c
[^] Cualquier carácter excepto los especificados [^0-9] Todo excepto números
\d Dígito \d+ 123, 007
\D No dígito \D+ abc, XYZ
\w Carácter de palabra \w+ abc_123
\W Carácter no-palabra \W+ #@!, espacios
\s Espacio en blanco \s+ espacio, tabulación, salto
\S Carácter no blanco \S+ abc, 123
` ` Operador OR `foo
() Agrupación (abc)+ abcabc
\b Límite de palabra \bregex\b Coincide solo con regex

Parte 2: Patrones prácticos (Soporte multilingüe)

Uso Patrón Notas
Solo números ^\d+$ Todos los caracteres son dígitos
Número decimal ^\d+\.\d+$ Un solo punto decimal
Solo alfanumérico ^[a-zA-Z0-9]+$ Útil para IDs de usuario
Correo (básico) ^[\w.-]+@[\w.-]+\.[a-zA-Z]{2,}$ Formato común
URL http/https https?://[\w.-]+\.[a-zA-Z]{2,}(/[\w./?=&%-]*)? Soporte de path y query
Fecha ISO \d{4}-\d{2}-\d{2} AAAA-MM-DD
Teléfono internacional \+\d{1,3}[\s-]?\d{1,14} Ejemplo: +34 612...
Nombre de usuario ^[a-zA-Z0-9._-]{3,20}$ Estilo redes sociales
Contraseña fuerte ^(?=.*[a-z])(?=.*[A-Z])(?=.*\d).{8,}$ Requiere letras y dígitos

Parte 3: Coincidencia multilínea

🔹 ¿Por qué usar [\s\S]*??

El carácter . no coincide con saltos de línea. Para capturar bloques de texto con saltos de línea, se recomienda:

[\s\S]*?

💡 Alternativa: [\s\S\n]*? puede ser útil para entornos específicos como VSCode.

🔹 Patrones comunes

Uso Patrón Notas
Bloque de texto [\s\S]*? Coincidencia segura
Etiqueta <div> <div[\s\S]*?</div> Hasta etiqueta de cierre
Comentario HTML <!--[\s\S]*?--> Bloques de comentarios
Código Markdown "[\s\S]*?" Bloque entre backticks triple

Parte 4: Técnicas de reemplazo

🔹 Sintaxis de grupos de reemplazo

  • ${1}, ${2} (VSCode, .NET, Python, etc.)
  • $1, $2 (JavaScript, sed, etc.)

🔹 Ejemplos útiles

Tarea Patrón Resultado
Invertir palabras (\w+)\s+(\w+) ${2} ${1}
Envolver en <span> >([^<]+)< ><span>${1}</span><
CSV → JSON ^([^,]+),([^,]+),([^,]+)$ { "a": "${1}", "b": "${2}", "c": "${3}" }
Reformat fecha (\d{4})/(\d{2})/(\d{2}) ${1}-${2}-${3}
camelCase → snake_case ([a-z])([A-Z]) ${1}_${2}

Parte 5: Compatibilidad por herramienta

Herramienta Multilínea No-greedy Sintaxis reemplazo Notas
VSCode ✅ (panel búsqueda) ${1} Recomienda [\s\S]*?
JavaScript ✅ (flag s) $1, $<nombre> Soporta grupos con nombre
Python (re) ✅ (DOTALL) \g<1> o \1 Usar strings crudos (r"")
sed ❌ (línea a línea) \1, \2 Soporte básico
grep/egrep Solo búsqueda, sin reemplazo

Parte 6: Buenas prácticas y anti-patrones

✅ Recomendaciones

  • Usa [\s\S]*? para bloques con saltos de línea
  • Evita .*, usa coincidencia no codiciosa
  • Agrupaciones innecesarias → usa (?:...)
  • Nombra grupos para mejor claridad ((?<año>\d{4}))
  • Añade comentarios si es complejo (usa re.VERBOSE)

❌ Antipatrones comunes

Patrón Problema
.* Captura demasiado (coincidencia codiciosa)
[^a-z] No compatible con caracteres acentuados
Anidar etiquetas HTML/XML anidado no es ideal con regex
.+ Coincide con líneas vacías también

Conclusión

Esta guía proporciona una referencia robusta para usar expresiones regulares de forma segura y eficaz en diferentes entornos.
El uso estándar de [\s\S]*? para multilínea, junto con prácticas de diseño claras y compatibilidad de herramientas, garantiza expresiones reutilizables y mantenibles.

Una expresión bien diseñada es una herramienta poderosa y confiable.

タイトルとURLをコピーしました