Fundamentos y Aplicación de Expresiones Regulares en el Desarrollo de Software

Introducción a las Expresiones Regulares

Las expresiones regulares, comúnmente conocidas como Regex, son secuencias de caracteres que conforman un patrón de búsqueda. Su función principal es facilitar la identificación, validación y manipulación de fragmentos de texto dentro de cadenas más complejas. Mediante el uso de una sintaxis estandarizada, permiten resolver problemas como la validación de formatos (correos electrónicos, fechas), la extracción de datos específicos o la sustitución masiva de caracteres.

Implementación según el Lenguaje

La mayoría de los lenugajes de programación modernos integran motores de Regex de forma nativa o mediante librerías estándar:

  • Python: Utiliza el módulo re (métodos como search, match, findall).
  • Java: Emplea el paquete java.util.regex con las clases Pattern y Matcher.
  • C#: Se basa en el espacio de nombres System.Text.RegularExpressions a través de la clase Regex.
  • JavaScript: Soporta Regex de forma nativa mediante el objeto RegExp o literales encerrados en barras laterales (/patrón/).

Componentes de la Sintaxis

Caracteres de Escape (No imprimibles)

Estos caracteres representan elementos de formato o control dentro de un texto:

Símbolo Descripción
\n Salto de línea.
\r Retorno de carro.
\t Tabulación horizontal.
\s Cualquier carácter de espacio en blanco (espacio, tabulador, salto de línea).
\S Cualquier carácter que no sea un espacio en blanco.

Metacaracteres Especiales

Son símbolos con un significado reservado que definen el comportamiento de la búsqueda:

Carácter Función
. Coincide con cualquier carácter individual excepto saltos de línea.
^ Indica el inicio de una cadena o línea.
$ Indica el final de una cadena o línea.
* Cuantificador: busca el elemento anterior 0 o más veces.
+ Cuantificador: busca el elemento anterior 1 o más veces.
? Hace que el elemento anterior sea opcional (0 o 1 ocurrencia).
[ ] Define un conjunto o rango de caracteres permitido (ej. [a-z]).
| Operador lógico de alternancia (OR).
\ Escapa un carácter especial para buscarlo literalmente.

Cuantificadores y Control de Repetición

Los cuantificadores determinan la frecuencia con la que un componente debe aparecer para que exista una coincidencia:

  • {n}: Eaxctamente n veces.
  • {n,}: Al menos n veces.
  • {n,m}: Entre n y m veces, inclusive.

Por ejemplo, si deseamos validar un código de producto que empieza con la palabra "REF" seguida de 3 a 5 dígitos:

/REF-\d{3,5}/

Comportamiento Codicioso (Greedy) vs. Perezoso (Lazy)

Por defecto, cuantificadores como * y + son "codiciosos", lo que significa que intentarán capturar la mayor cantidad de texto posible. Al añadir un signo de inetrrogación ? después del cuantificador, el motor se vuelve "perezoso", capturando la coincidencia más corta posible.

Ejemplo en HTML:
Texto: <b>Texto 1</b> y <b>Texto 2</b>
Codicioso (/<b>.*</b>/): Captura desde el primer <b> hasta el último </b>.
Perezoso (/<b>.*?</b>/): Captura cada etiqueta por separado.

Anclajes y Límites de Palabra

Los anclajes no coinciden con caracteres, sino con posiciones:

  • \b: Representa un límite de palabra (donde comienza o termina una palabra).
  • \B: Representa una posición que no es un límite de palabra.
/\bauto/  # Coincide con "automóvil", pero no con "desauto"
/auto\b/  # Coincide con "plauto", pero no con "autor"

Grupos de Captura y Referencias Retroactivas

Encerrar parte de una expresión entre paréntesis ( ) crea un grupo de captura. Esto permite aplicar cuantificadores a todo el grupo o extraer partes específicas de la cadena buscada.

Las referencias retroactivas (como \1) permiten buscar repeticiones del texto capturado por un grupo previo. Útil para encontrar palabras duplicadas consecutivas:

/\b([a-zA-Z]+) \1\b/

Colección de Patrones Comunes

Validación de Números

  • Solo dígitos: ^[0-9]*$
  • Enteros (incluyendo negativos): ^-?\d+$
  • Decimales con dos posiciones: ^[0-9]+(\.[0-9]{2})?$

Validación de Cadenas y Formatos

  • Correo Electrónico: ^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$
  • Dirección IP (IPv4): ^((25[0-5]|2[0-4]\d|[01]?\d\d?)\.){3}(25[0-5]|2[0-4]\d|[01]?\d\d?)$
  • Fecha (AAAA-MM-DD): ^\d{4}-(0[1-9]|1[0-2])-(0[1-9]|[12]\d|3[01])$
  • URL: ^https?:\/\/[\w\-_]+(\.[\w\-_]+)+([\w\-\.,@?^=%&:/~\+#]*[\w\-\@?^=%&/~\+#])?$

Manipulación de Texto

  • Eliminar espacios al inicio y final: ^\s+|\s+$
  • Detectar etiquetas HTML: </?\w+((\s+\w+(\s*=\s*(?:".*?"|'.*?'|[^'">\s]+))?)+\s*|\s*)/?>
  • Caracteres Unicode (Chino/Japonés/Coreano): [\u4e00-\u9fa5]

Etiquetas: Regex PatternMatching StringManipulation algorithms

Publicado el 7-9 06:02