Una librería con libros holográficos hechos de código fuente.

Expresiones Regulares en Java: expresiones complejas

1. Introducción

En la entrada anterior aprendimos la sintaxis básica de las expresiones regulares y vimos algunos ejemplos simples. Ahora profundizaremos en aspectos más avanzados, como:

  • Cuantificadores
  • Clases de caracteres
  • Referencias a grupos
  • Uso de la librería java.util.regex
  • Ejemplos avanzados de validación, análisis y extracción de información

2. Cuantificadores en Expresiones Regulares

Los cuantificadores permiten especificar cuántas veces debe aparecer un carácter o grupo en la cadena.

CuantificadorSignificado
?0 o 1 vez
*0 o más veces
+1 o más veces
{n}Exactamente n veces
{n,}Al menos n veces
{n,m}Entre n y m veces

Ejemplo: Validar una fecha en formato dd/mm/yyyy:

String regex = "\\d{2}/\\d{2}/\\d{4}";
String fecha = "15/08/2023";
System.out.println(fecha.matches(regex)); // true


3. Clases de Caracteres

Las clases de caracteres permiten agrupar conjuntos de carácteres en una sola expresión.

ClaseDescripción
[abc]Cualquiera de a, b o c
[^abc]Cualquier carácter excepto a, b o c
[a-z]Cualquier letra minúscula
[A-Z]Cualquier letra mayúscula
[0-9]Cualquier dígito
[a-zA-Z0-9]Cualquier letra o número

Ejemplo: Validar un nombre de usuario (solo letras y números, mínimo 5 caracteres):

String regex = "[a-zA-Z0-9]{5,}";
String usuario = "user123";
System.out.println(usuario.matches(regex)); // true


4. Referencias a Grupos y Captura

Los paréntesis () permiten agrupar partes de la expresión y referirse a ellas posteriormente.

Ejemplo: Extraer el dominio de un correo electrónico:

import java.util.regex.*;

String regex = "([a-zA-Z0-9._%+-]+)@([a-zA-Z0-9.-]+)\\.([a-zA-Z]{2,})";
String correo = "ejemplo@correo.com";

Pattern pattern = Pattern.compile(regex);
Matcher matcher = pattern.matcher(correo);

if (matcher.matches()) {
    System.out.println("Usuario: " + matcher.group(1));
    System.out.println("Dominio: " + matcher.group(2));
}


5. Clases de java.util.regex

Pattern

Clase que representa la expresión regular compilada.

Pattern pattern = Pattern.compile("\\d+");

Matcher

Clase que permite realizar operaciones de búsqueda sobre una cadena.

Matcher matcher = pattern.matcher("123abc");

Métodos principales

MétodoDescripción
matches()Verifica si toda la cadena cumple la expresión
find()Busca la siguiente coincidencia
group()Obtiene el texto coincidente

Ejemplo: Buscar todas las palabras de una cadena

Pattern pattern = Pattern.compile("\\w+");
Matcher matcher = pattern.matcher("Hola mundo 123");

while (matcher.find()) {
    System.out.println(matcher.group());
}

Salida:

Hola
mundo
123


6. Ejemplos Avanzados

Validación de Número de Teléfono (Formato +34 600 123 456)

String regex = "\\+34\\s[6-7]\\d{2}\\s\\d{3}\\s\\d{3}";
String telefono = "+34 600 123 456";
System.out.println(telefono.matches(regex)); // true

Extracción de Enlaces en un Texto HTML

Pattern pattern = Pattern.compile("<a\\s+href=\\"(.*?)\\".*?>");
Matcher matcher = pattern.matcher("<a href=\"https://ejemplo.com\">Link</a>");

if (matcher.find()) {
    System.out.println("URL encontrada: " + matcher.group(1));
}

Salida:

URL encontrada: https://ejemplo.com


7. Conclusión

En esta sesión hemos explorado conceptos intermedios de expresiones regulares en Java:

  • Cuantificadores
  • Clases de caracteres
  • Referencias a grupos
  • Uso de Pattern y Matcher
  • Ejemplos avanzados de validación y extracción

En la próxima entrada veremos optimización de expresiones regulares y técnicas avanzadas.


Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.