Clase Pattern de Java
En Java, laPatternclase Pattern es uno de los componentes centrales de la funcionalidad de expresiones regulares; pertenece aljava.util.regexpaquete.
La expresión regular (Regular Expression) es una poderosa herramienta de procesamiento de texto utilizada para hacer coincidir, buscar y reemplazar patrones específicos en cadenas.
PatternLa función principal de la clase es compilar la expresión regular en un patrón (Pattern) para realizar operaciones de coincidencia eficientes posteriormente.
Introducción a las expresiones regulares
Una expresión regular es una sintaxis utilizada para describir patrones de cadenas. Mediante símbolos y reglas específicas, se pueden definir reglas complejas de coincidencia de cadenas. Por ejemplo:
\dCoincide con cualquier dígito (equivalente a[0-9])\wCoincide con cualquier letra, dígito o guion bajo (equivalente a[a-zA-Z0-9_])a+Coincide con una o más letras consecutivasa^Coincide con el inicio de la cadena$Coincide con el final de la cadena
Uso básico de la clase Pattern
Crear objetos Pattern
PatternLa clase no tiene constructor público; debe crearse una instancia mediante el método estáticocompile()para crear una instancia:
Ejemplo
// Compilar la expresión regular
Pattern pattern = Pattern.compile("a*b");
Métodos comunes
matcher(CharSequence input)
Crea unMatcherobjeto para realizar operaciones de coincidencia en la cadena de entrada:
Ejemplo
matches(String regex, CharSequence input)
Método estático que determina directamente si la cadena de entrada coincide completamente con la expresión regular:
Ejemplo
split(CharSequence input)
Divide la cadena de entrada según la expresión regular:
Ejemplo
Banderas de expresiones regulares (Flags)
Al compilar la expresión regular, se pueden especificar diferentes banderas para cambiar el comportamiento de coincidencia:
| Bandera | Descripción |
|---|---|
Pattern.CASE_INSENSITIVE |
Ignorar mayúsculas y minúsculas |
Pattern.MULTILINE |
Modo multilínea,^y$coincide con el inicio y el final de cada línea |
Pattern.DOTALL |
.coincide con todos los caracteres, incluidos los saltos de línea |
Pattern.UNICODE_CASE |
habilita el plegado de mayúsculas y minúsculas compatible con Unicode |
Ejemplo de uso:
Ejemplo
Pattern pattern = Pattern.compile("a*b", Pattern.CASE_INSENSITIVE);
Aplicaciones prácticas de la clase Pattern
Validar formato de correo electrónico
Ejemplo
Pattern emailPattern = Pattern.compile(emailRegex);
String email = "[email protected]";
boolean isValid = emailPattern.matcher(email).matches();
Extraer números
Ejemplo
Pattern numberPattern = Pattern.compile("\\d+\\.?\\d*");
Matcher matcher = numberPattern.matcher(text);
if (matcher.find()) {
String number = matcher.group(); // "123.45"
}
Reemplazar cadenas
Ejemplo
Pattern phonePattern = Pattern.compile("\\d{3}-\\d{3}-\\d{4}");
String output = phonePattern.matcher(input).replaceAll("[PHONE]");
// Salida: "Hello, my phone is [PHONE]"
Consejos de optimización de rendimiento
Precompilar expresiones regulares: Para expresiones regulares que se utilizan varias veces, se deben precompilar en
Patternobjetos, en lugar de recompilarlas en cada uso.Evitar expresiones regulares excesivamente complejas: Las expresiones regulares demasiado complejas pueden causar degradación del rendimiento e incluso el problema de "retroceso catastrófico".
Usar grupos de manera razonable: Los grupos no capturadores
(?:...)tienen mejor rendimiento que los grupos capturadores(...); si no se necesita capturar contenido, se deben usar grupos no capturadores.
Resumen
PatternLa clase es el núcleo de la funcionalidad de expresiones regulares en Java y proporciona una potente capacidad de coincidencia de patrones en cadenas. Mediante el uso razonable de laPatternclase y su clase complementariaMatcherse pueden completar eficientemente diversas tareas de procesamiento de cadenas. Dominar el uso de las expresiones regulares y de laPatternclase mejorará enormemente la capacidad de procesamiento de texto de los desarrolladores.
La siguiente tabla enumera losPatternmétodos comunes de la clase:
Métodos de construcción y compilación
| Método | Descripción |
|---|---|
static Pattern compile(String regex) |
Compila la expresión regular en un objeto Pattern |
static Pattern compile(String regex, int flags) |
Compila la expresión regular con banderas especificadas |
static boolean matches(String regex, CharSequence input) |
Coincide rápidamente con la expresión regular (compilación + coincidencia) |
static String quote(String s) |
Convierte la cadena a modo literal (escapa todos los caracteres especiales) |
Constantes de banderas (comunes)
| Bandera | Descripción |
|---|---|
Pattern.CASE_INSENSITIVE |
Coincidencia sin distinguir entre mayúsculas y minúsculas |
Pattern.MULTILINE |
Modo multilínea (^ y $ coinciden con el inicio y el final de línea) |
Pattern.DOTALL |
El punto (.) coincide con todos los caracteres, incluidos los terminadores de línea |
Pattern.UNICODE_CASE |
Habilita el plegado de mayúsculas y minúsculas compatible con Unicode |
Métodos de coincidencia y división
| Método | Descripción |
|---|---|
Matcher matcher(CharSequence input) |
Crea un objeto Matcher |
String[] split(CharSequence input) |
Divide la cadena de entrada con el patrón |
String[] split(CharSequence input, int limit) |
División con límite de veces |
Stream<String> splitAsStream(CharSequence input) |
Devuelve un flujo (stream) después de la división (Java 8+) |
Métodos de información del patrón
| Método | Descripción |
|---|---|
String pattern() |
Devuelve la expresión regular compilada |
int flags() |
Devuelve las banderas establecidas al compilar |
String toString() |
Devuelve la representación en cadena del patrón |