1326

Capítulo 30 Cadenas, caracteres y expresiones regulares

las clases de caracteres se determinan mediante los valores enteros de las letras. En este ejemplo, 

"[A-Za-z]"

 

concuerda con todas las letras mayúsculas y minúsculas. El rango 

"[A-z]"

 concuerda con todas las letras y tam-

bién concuerda con los caracteres (como 

%

 y 6) que tengan un valor entero entre la letra 

Z

 mayúscula y la letra 

a

 

minúscula (para obtener más información acerca de los valores enteros de los caracteres, consulte el apéndice B, 
Conjunto de caracteres ASCII). Al igual que las clases predefi nidas de caracteres, las clases de caracteres delimita-
das entre corchetes concuerdan con un solo carácter en el objeto de búsqueda.

En la línea 9 (fi gura 30.20), el asterisco después de la segunda clase de carácter indica que puede concordar 

cualquier número de letras. En general, cuando aparece el operador de expresión regular 

"*"

 en una expresión 

regular, el programa intenta hacer que concuerden cero o más ocurrencias de la subexpresión que va inmediata-
mente después de 

"*"

. El operador 

"+"

 intenta hacer que concuerden una o más ocurrencias de la subexpresión 

que va inmediatamente después de 

"+"

. Por lo tanto, 

"A*"

 y 

"A+"

 concordarán con 

"AAA"

, pero sólo 

"A*"

 con-

cordará con una cadena vacía.

Si el método 

validarPrimerNombre

 devuelve 

true

 (línea 29 de la fi gura 30.21), la aplicación trata de vali-

dar el apellido (línea 31) llamando a 

validarApellidoPaterno

(líneas 13 a 16 de la fi gura 30.20). La expresión 

regular para validar el apellido concuerda con cualquier número de letras divididas por espacios, apóstrofes o 
guiones cortos.

En la línea 33 se valida la dirección, llamando al método 

validarDireccion

 (líneas 19 a 23 de la fi gura 

30.20). La primera clase de carácter concuerda con cualquier dígito una o más veces (

\\d+

). Observe que se uti-

lizan dos caracteres 

\

, ya que 

\

 generalmente inicia una secuencia de escape en una cadena. Por lo tanto, 

\\d

 en 

una cadena de Java representa al patrón de expresión regular 

\d

. Después concordamos uno o más caracteres de 

espacio en blanco (

\\s+

). El carácter 

"|"

 concuerda con la expresión a su izquierda o a su derecha. Por ejemplo, 

"Hola

 

(Juan

 

|

 

Juana)"

 concuerda tanto con 

"Hola Juan"

 como con 

"Hola Juana"

. Los paréntesis se utilizan 

para agrupar partes de la expresión regular. En este ejemplo, el lado izquierdo de 

| concuerda con una sola palabra 

y el lado derecho concuerda con dos palabras separadas por cualquier cantidad de espacios en blanco. Por lo tanto, 
la dirección debe contener un número seguido de una o dos palabras. Por lo tanto, 

"10 Broadway"

 y 

"10 Main 

Street"

 son ambas direcciones válidas en este ejemplo. Los métodos ciudad (líneas 26 a 29 de la fi gura 30.20) 

y estado (líneas 32 a 35 de la fi gura 30.20) también concuerdan con cualquier palabra que tenga al menos un 
carácter o, de manera alternativa, con dos palabras cualesquiera con al menos un carácter, si éstas van separadas 
por un solo espacio. Esto signifi ca que tanto 

Waltham

 como 

West Newton

 concordarían. 

Cuantifi cadores

El asterisco (

*

) y el signo de suma (

+

) se conocen de manera formal como 

cuantifi cadores

. En la fi gura 30.22 

se presentan todos los cuantifi cadores. Ya hemos visto cómo funcionan el asterisco (

*

) y el signo de suma (+). 

Todos los cuantifi cadores afectan solamente a la subexpresión que va inmediatamente antes del cuantifi cador. El 
cuantifi cador signo de interrogación (

?

) concuerda con cero o una ocurrencia de la expresión que cuantifi ca. Un 

conjunto de llaves que contienen un número (

{

n

}

) concuerda exactamente con 

n ocurrencias de la expresión 

que cuantifi ca. En la fi gura 30.20 mostramos este cuantifi cador para validar el código postal, en la línea 40. Si se 
incluye una coma después del número encerrado entre llaves, el cuantifi cador concordará al menos con 

n

 ocu-

rrencias de la expresión cuantifi cada. El conjunto de llaves que contienen dos números (

{

n,m

}

) concuerda entre 

n y m ocurrencias de la expresión que califi ca. Los cuantifi cadores pueden aplicarse a patrones encerrados 
entre paréntesis para crear expresiones regulares más complejas.

Todos los cuantifi cadores son 

avaros

. Esto signifi ca que concordarán con todas las ocurrencias que puedan, 

siempre y cuando haya concordancia. No obstante, si alguno de estos cuantifi cadores va seguido por un signo de 
interrogación (

?

), el cuantifi cador se vuelve 

reacio

 (o, en algunas ocasiones, 

fl ojo

). De esta forma, concordará con 

la menor cantidad de ocurrencias posibles, siempre y cuando haya concordancia.

El código postal (línea 40 en la fi gura 30.20) concuerda con un dígito cinco veces. Esta expresión regular 

utiliza la clase de carácter de dígito y un cuantifi cador con el dígito 5 entre llaves. El número telefónico (línea 46 
en la fi gura 30.20) concuerda con tres dígitos (el primero no puede ser cero) seguidos de un guión corto, seguido 
de tres dígitos más (de nuevo, el primero no puede ser cero), seguidos de cuatro dígitos más.

El método 

matches

 de 

String

 verifi ca si una cadena completa se conforma a una expresión regular. Por 

ejemplo, queremos aceptar 

"Smith"

 como apellido, pero no 

"9@Smith#"

. Si sólo una subcadena concuerda con 

la expresión regular, el método 

matches

 devuelve 

false

.

30_MAQ_CAP_30_DEITEL.indd1326

5/8/084:22:44PM