Casos de caracteres Regex en Java

Las expresiones regulares (también llamadas «Regex») son tipos especiales de strings de coincidencia de patrones que describen un patrón en un texto. Una expresión regular se puede comparar con otra string para ver si la string se ajusta al patrón. En general, la expresión regular consta de caracteres normales, clases de caracteres, caracteres comodín y cuantificadores. Hablaremos específicamente sobre las clases de personajes aquí. A veces es necesario hacer coincidir cualquier secuencia que contenga uno o más caracteres, en cualquier orden, que forme parte de un conjunto de caracteres. Por ejemplo, para hacer coincidir palabras completas, queremos hacer coincidir cualquier secuencia de letras del alfabeto. Las clases de caracteres son útiles para tales casos de uso. Una clase de caracteres es un conjunto de caracteres tales que los caracteres se colocan entre corchetes ‘[‘ y ‘]’. Por ejemplo, la clase [abc] coincide con los caracteres a, b, c. También se puede especificar un rango de caracteres usando guiones. Por ejemplo, para hacer coincidir palabras completas de letras minúsculas, se puede usar la clase [az]. 

Tenga en cuenta que una clase de caracteres no tiene relación con una construcción de clase o archivos de clase en Java. Además, la palabra «coincidencia» significa que existe un patrón en una string, no significa que toda la string coincida con el patrón. Un patrón regex nos permite usar dos tipos de clases de caracteres: 

  • Clases de caracteres predefinidas
  • Clases de personajes personalizados

Clases de caracteres predefinidas

Algunas clases de caracteres de uso frecuente están predefinidas en Java, se enumeran a continuación. Los caracteres de estas clases suelen ir precedidos de una barra invertida «\» y no es necesario que residan entre corchetes «[» y «]».

Clases de caracteres predefinidas

Significado de las clases de caracteres predefinidas

. (punto) Este carácter especial punto (.) coincide con cualquier carácter. Un punto coincide con un carácter (cualquiera), dos puntos coinciden con dos caracteres y así sucesivamente. Los caracteres de punto pueden coincidir o no con los terminadores de línea.
\d Esto coincide con cualquier carácter de dígito. Esto funciona igual que la clase de carácter [0-9].
\D Esto coincide con cualquier carácter a excepción de los dígitos. Esto funciona igual que la clase de caracteres [^0-9].
\s Esto coincide con cualquier carácter de espacio en blanco. Esto incluye un espacio ‘ ‘, una tabulación ‘\t’, una nueva línea ‘\n’, una tabulación vertical ‘\x0B’, un salto de página ‘\f’, un retorno de carro ‘\r’ y el carácter de retroceso ‘\ b’. 
\S Esto coincide con cualquier carácter, excepto los espacios en blanco enumerados anteriormente.
\w Esto coincide con cualquier carácter de palabra, incluidas mayúsculas y minúsculas, y también incluye caracteres de dígitos y el carácter de subrayado ‘_’. Esto funciona igual que la clase [a-zA-z_0-9].
\W Esto coincide con cualquier carácter, excepto con los caracteres de palabras. Esto funciona igual que la clase [^a-zA-z_0-9].

Algunos ejemplos de patrones de expresiones regulares que utilizan clases de caracteres predefinidas:

Patrón Regex usando clases de caracteres predefinidas

String de entrada – Resultado

String de entrada – Resultado

String de entrada – Resultado

hermano barra – Partido ab1r – Partido ba1r – No coincide
La expresión regular «br» significa que puede haber cualquier carácter 1 entre «b» y «r», el patrón se encuentra en «bar» y «ab1r», pero no se encuentra en «ba1r» ya que un punto coincide con un solo carácter, pero aquí hay más de un carácter entre “b” y “r”.
 
\d\d-\d\d-\d\d\d\d 01-01-2022 – Partido 31-12-2050 – Partido 2022-02-02 – No coincide
La expresión regular «\d\d-\d\d-\d\d\d\d» es una expresión regular ingenua para la fecha en formato «DD-MM-YYYY», todos los caracteres son dígitos. La expresión regular es «ingenua» porque coincide con las fechas del formato «MM-DD-YYYY» y las fechas > 31 o los meses > 12 tampoco se tienen en cuenta.
 
\d\d-\D\D\D-\d\d\d\d 01-ENE-2022 – Partido 31-12-2050 – No coincide 22-a1B-1234 – No coincide
La expresión regular «\d\d-\d\d-\d\d\d\d» es otra expresión regular ingenua para la fecha en formato «DD-MMM-YYYY», donde los caracteres de fecha y año son dígitos y los caracteres de mes son cualquier otra cosa que dígitos. 
 
…\s… abc xyz – Partido abc_xyz – No coincide abc <tab_space> xyz – Coincidencia
“…\s…” expresión regular significa dos grupos de 3 caracteres separados por cualquier carácter de espacio en blanco. Como “_” no es un carácter de espacio en blanco, “abc_xyz” no coincide.
 
…\S… 123 456 – No coincide 123+456 – Partido abc_xyz – Partido
La expresión regular “…\S…” significa dos grupos de 3 caracteres separados por cualquier carácter que no sea un carácter de espacio en blanco. Como ” ” (espacio) es un carácter de espacio en blanco, “123 456” no coincide.
 
\w\w\w\W\w\w\w abc xyz – Partido LMN_opq – No coincide 123+456 – Partido
La expresión regular “\w\w\w\W\w\w\w” significa dos grupos de 3 caracteres de palabra separados por cualquier carácter que no sea una palabra. Como “_” es un carácter de palabra, “LMN_opq” no coincide.

Clases de personajes personalizados

Java nos permite definir nuestras propias clases de caracteres usando […]. Algunos ejemplos de clases de caracteres personalizados son los siguientes:

Ejemplo de clase de personaje personalizado

Significado de la clase de carácter personalizado

b[aeiou]t Esta expresión regular significa que el patrón debe comenzar con «b» seguida de cualquiera de las vocales «a», «e», «i», «o», «u» seguida de «t».
Las strings «bat», «bet», «bit», «bot», «but» coincidirían con esta expresión regular, pero «bct», «bkt», etc. no coincidirían.
[bB][aAeEiIoOuU][tT] Tal expresión regular se puede usar para permitir letras mayúsculas también en la expresión regular anterior. Entonces, las strings «bAT», «BAT», etc. coincidirían con el patrón.
b[^aeiou]t «^» al comienzo de la clase de caracteres funciona como negación o complemento, de modo que esta expresión regular significa que se permite cualquier carácter que no sean vocales entre «b» y «t». Las strings «bct», «bkt», «b+t», etc. coincidirían con el patrón. El uso de un ‘^’ al comienzo de la clase de caracteres tiene un significado especial, pero el uso de ‘^’ en cualquier parte de la clase, excepto al principio, actúa como cualquier otro carácter normal.
[az][0-3] El rango de letras y dígitos se puede especificar en clases de caracteres usando el guión «-«. Las strings «a1», «z3», etc. coinciden con el patrón. Las strings «k7», «n9», etc. no coinciden.
[a-zA-Z][0-9] Se puede usar más de un rango en una clase. Las strings «A1», «b2», etc. coinciden con el patrón.
[AF[GZ]] Las clases de caracteres anidadas simplemente las agregan, por lo que esta clase es la misma que la clase [AZ].
[ap&&[lz]] La intersección de rangos también funciona en clases de caracteres. Esta expresión regular significa que los caracteres «l», «m», «n», «o», «p» coincidirían en una string.
[az&&[^aeiou]] La resta de rangos también funciona en las clases de caracteres. Esta expresión regular significa que las vocales se restan del rango «az».

Los patrones Regex discutidos hasta ahora requieren que cada posición en la string de entrada coincida con una clase de carácter específica. Por ejemplo, el patrón “[az]\s\d” requiere una letra en la primera posición, un carácter de espacio en blanco en la segunda posición y un dígito en la tercera posición. Estos patrones son inflexibles, restrictivos y requieren más esfuerzos de mantenimiento. Para resolver este problema, se pueden usar cuantificadores en las clases de caracteres. Usando cuantificadores, podemos especificar la cantidad de veces que un carácter en una expresión regular puede coincidir con la secuencia de caracteres.

cuantificadores

Significado del cuantificador

* Cero o más veces
Colocar un asterisco «*» después de una clase de carácter significa «permitir cualquier número de ocurrencias de esa clase de carácter». Por ejemplo, la expresión regular «0*\d» coincide con cualquier número de ceros iniciales seguidos de un dígito.
   
+ Una o más veces
El signo más “+” tiene el mismo efecto que XX*, lo que significa un patrón seguido por un patrón de asterisco. Por ejemplo, la expresión regular «0+\d» coincide con al menos un cero inicial seguido de un dígito.
   
? cero o una vez
“¿?” el signo de interrogación permite cero o una ocurrencia. Por ejemplo, la expresión regular «\w\w-?\d\d» coincide con caracteres de 2 palabras seguidos de un guión opcional y luego seguido de caracteres de 2 dígitos.
   
{metro} Exactamente «m» veces
   
{m,} Al menos «m» veces
   
{m, n} Al menos “m” veces y como máximo “n” veces

Publicación traducida automáticamente

Artículo escrito por dishaagrawal1 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

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