Expresiones regulares en Java: guía completa para principiantes
Las expresiones regulares (regex) son una herramienta poderosa para buscar, extraer y reemplazar texto según un patrón. En Java, el trabajo con expresiones regulares se implementa a través del paquete java.util.regex. En este artículo, analizaremos los fundamentos de las expresiones regulares en Java, aprenderemos a usar las clases Pattern y Matcher, y veremos ejemplos prácticos.
1. Clases principales para trabajar con regex en Java
En Java, se utilizan dos clases principales para trabajar con expresiones regulares:
- Pattern — representa una expresión regular compilada.
- Matcher — realiza operaciones de búsqueda y coincidencia con el texto.
También existe un método conveniente String.matches(), que permite verificar rápidamente si una cadena coincide con un patrón, pero es menos flexible.
Ejemplo 1: Coincidencia simple
import java.util.regex.*;
public class RegexExample1 { public static void main(String[] args) { String text = "¡Hola, mundo! Java es el mejor lenguaje."; String pattern = "Java";
Pattern p = Pattern.compile(pattern); Matcher m = p.matcher(text);
if (m.find()) { System.out.println("Palabra encontrada: " + m.group()); } else { System.out.println("No hay coincidencias"); } }}Salida: Palabra encontrada: Java
2. Metacaracteres y clases de caracteres
Las expresiones regulares utilizan caracteres especiales (metacaracteres) para describir patrones:
.— cualquier carácter (excepto salto de línea)\\d— dígito [0-9]\\D— no dígito\\w— letra, dígito o guion bajo [a-zA-Z0-9_]\\W— no palabra\\s— carácter de espacio en blanco\\S— no carácter de espacio en blanco[abc]— uno de los caracteres a, b o c[^abc]— cualquier carácter excepto a, b, c
Ejemplo 2: Búsqueda de dígitos en el texto
import java.util.regex.*;
public class RegexExample2 { public static void main(String[] args) { String text = "Mi número: 123-456-7890"; String pattern = "\\\\d+"; // uno o más dígitos
Pattern p = Pattern.compile(pattern); Matcher m = p.matcher(text);
while (m.find()) { System.out.println("Número encontrado: " + m.group()); } }}Salida:
Número encontrado: 123Número encontrado: 456Número encontrado: 78903. Cuantificadores y límites
Los cuantificadores indican cuántas veces debe repetirse un elemento del patrón:
*— 0 o más veces+— 1 o más veces?— 0 o 1 vez{n}— exactamente n veces{n,}— n o más veces{n,m}— de n a m veces
Los límites ayudan a indicar dónde debe ubicarse el patrón:
^— inicio de la cadena$— final de la cadena\\b— límite de palabra
Ejemplo 3: Validación de dirección de correo electrónico
import java.util.regex.*;
public class RegexExample3 { public static void main(String[] args) { String email = "user@example.com"; String pattern = "^[\\\\w.-]+@[\\\\w.-]+\\\\.\\\\w{2,}$";
boolean isValid = Pattern.matches(pattern, email); System.out.println("El correo es válido: " + isValid); }}Salida: El correo es válido: true
4. Grupos de captura y reemplazo de texto
Los grupos de captura permiten extraer par