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