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.
| Cuantificador | Significado | 
|---|---|
? | 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.
| Clase | Descripció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étodo | Descripció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 
PatternyMatcher - 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