0% encontró este documento útil (0 votos)
73 vistas12 páginas

Tarea 2 Individual

El documento describe las expresiones regulares en Java. Explica que una expresión regular es un patrón que define un conjunto de cadenas y que se puede usar para comparar y reemplazar texto. Luego detalla los diferentes componentes de una expresión regular como caracteres, clases de caracteres, cuantificadores, operadores lógicos y metacaracteres de frontera. Finalmente incluye varias tablas que resumen estos componentes y sus usos.

Cargado por

Jaqui
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como DOCX, PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
73 vistas12 páginas

Tarea 2 Individual

El documento describe las expresiones regulares en Java. Explica que una expresión regular es un patrón que define un conjunto de cadenas y que se puede usar para comparar y reemplazar texto. Luego detalla los diferentes componentes de una expresión regular como caracteres, clases de caracteres, cuantificadores, operadores lógicos y metacaracteres de frontera. Finalmente incluye varias tablas que resumen estos componentes y sus usos.

Cargado por

Jaqui
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como DOCX, PDF, TXT o lee en línea desde Scribd
Está en la página 1/ 12

TAREA 2 INDIVIDUAL

INVESTIGAR EL TEMA: EXPRESIONES REGULARES EN JAVA.

Una expresión regular es una secuencia de caracteres y símbolos, un patrón, que


define un conjunto de cadenas. Las expresiones regulares pueden usarse para
comparar (y reemplazar) texto en un archivo, datos suministrados a una aplicación,
datos capturados en un formulario, análisis lexicográfico, etc.

Si se usa una expresión para analizar o modificar un texto, se dice que “la expresión
regular se aplica al texto”. El patrón definido por una expresión regular se aplica a una
cadena de izquierda a derecha. Una vez que un carácter de la cadena se ha usado, no
puede reutilizarse. Por ejemplo la expresión regular “aba” se ajusta a la cadena match
"ababababa"sólo dos veces (aba_aba ).

Los constructores de una expresión regular incluyen caracteres, clases de caracteres,


cuantificadores y metacaracteres.

Caracteres

En una expresión regular se usan caracteres alfanuméricos normales y caracteres


especiales. Los caracteres especiales se escriben como secuencias de escape.

Los diferentes caracteres que se pueden emplear en una expresión regular se


muestran en la tabla 11.1

Tabla 11.1 Caracteres


Caracter Descripció
n
Alfa- Todos los caracteres alfanuméricos coinciden con sí mismos. Por ejemplo, la
numérico expresión regular “2 casas” coincide con la cadena “2 casas”.
\\ Coincide con el carácter ‘\’
\n Coincide con el carácter de salto de línea.
\f Coincide con el carácter de salto de forma.
\r Coincide con el carácter retorno de carro.
\t Coincide con el carácter tabulador
\v Coincide con el carácter tabulador vertical.
\cX Coincide con el carácter de control x
\0n Coincide con el carácter cuyo código es el valor octal 0n (0 <= n <= 7)
\0nn Coincide con el carácter cuyo código es el valor octal 0nn (0 <= n <= 7)
\0mnn Coincide con el carácter cuyo código es el valor octal 0mnn (0 <= m <= 3, 0 <=
n <= 7)
\xhh Coincide con el carácter cuyo código es el valor hexadecimal xhh.
\xhhh Coincide con el carácter cuyo código es el valor hexadecimal xhhh.
Nota: En Java las secuencias de escape se tienen que escribir con dos \\ ya que en sí el
carácter \ se representa por la secuencia de escape ‘\\’: ‘\\0’, ‘\\n’, ‘\\f’, etc.
Clases de Caracteres
Las clases de caracteres se utilizan para definir el contenido de un patrón. Esto es,
lo que el patrón debe buscar. Las diferentes clases de caracteres que se pueden
emplear en una expresión regular se muestran en la tabla 11.2

Tabla 11.2 Clases de Caracteres

Símbolo Descripci Ejemp


ón lo
[xyz] Coincide con un solo de los [ABc] coincide con A o con B
caracteres del conjunto de o con c pero no con D o con
caracteres encerrado entre los 7.
corchetes.
[^xyz] Negación. Coincide con un solo de los [^AB] coincide con C, F y H
caracteres que no esté en el conjunto pero no con A o B.
de caracteres encerrado entre los
corchetes. Se pueden usar un guión
para denotar un rango.
[a-z] Coincide con un solo de los [a-zA-Z] coincide con una de
caracteres del conjunto de las letras minúsculas o
caracteres dado por el rango. mayúsculas.
[^a-z] Coincide con un solo de los [^a-zA-Z] coincide con
caracteres del conjunto de un carácter que no sea
caracteres que no esté una letra
dado por el rango. minúscula o mayúscula.
[a-d[m-p]] Unión. Coincide con cualquier [a-d[m-p]] coincide con uno
carácter que este ya sea en el primer de los caracteres a a d o m a
o segundo p.
grupo
[a-z&&[def]] Intersección. Coincide con [a-z&&[def]] coincide con uno
cualquier carácter que esté en de los caracteres d, e o f.
ambos grupos
[a-z&&[^bc]] Substracción. Coincide con cualquier [a-z&&[^bc]] coincide con
carácter que esté en el primer uno de los caracteres a, d a z.
grupo pero no en el segundo.
. Coincide con cualquier carácter Coincide con a, b, -, etc.
excepto pero no con \n
el carácter salto de línea o cualquier
carácter UNICODE terminador de
línea.
\ Coincide con cualquier carácter Coincide con a, b, C, _,
w alfanumérico, incluyendo al guión etc. pero no con % o &
bajo.
Es equivalente a [a-zA-Z0-9_].
\ Coincide con cualquier carácter no Coincide con %, #, &, etc.
W alfanumérico. Es equivalente a pero no con a, b, C, o _.
[^a-
zA-Z0-9_].
\ Coincide con cualquier dígito. Equivale Coincide con 3, 4, 2, etc. pero
d a no con N, o p
[0-9].
\ Coincide con cualquier carácter que no Coincide con N, p, #, etc, pero no
D sea un dígito. Equivale a [^0-9]. con 3, 4, o 2.
\ Coincide con cualquier carácter de
s espacio. Equivale a [\t\r\n\v\f].
\ Coincide con cualquier carácter que
S no sea un carácter de espacio.
Equivale a
[^\t\r\n\v\f].
Nota: En Java las secuencias de escape se tienen que escribir con dos \\ ya que en sí el carácter \
se representa por la secuencia de escape ‘\\w’: ‘\\W’, ‘\\d’, ‘\\D’, etc.

Operadores Lógicos
Los operadores lógicos de la tabla 11.3 nos permiten combinar caracteres o clases
de caracteres para formar expresiones regulares más complejas.

Tabla 11.3 Operadores Lógicos


Operad Descripci Ejemp
or ón lo
XY Coincide con la expresión regular X aBc coincide con aBc.
seguida por la expresión regular Y. a-\d coincide con a-0, a-1, a-2, etc.
[a-f][^a-f] coincide con un
carácter en el rango a-f seguido de
un carácter
fuera del rango a-f .
X|Y Coincide con la expresión regular X o a|Bc coincide con ac, o con Bc.
con la expresión regular Y.

Cuantificadores
Los cuantificadores definen cuantas veces aparecerá un elemento en una
expresión. Los diferentes cuantificadores que se pueden emplear en una
expresión regular se muestran en la tabla 11.4

Tabla 11.4 Cuantificadores


Símbol Descripci Ejemplo
o ón
X{n} Coincide exactamente con n ocurrencias \d{5} coincide exactamente
de la expresión regular X. con 5 dígitos
X{n,} Coincide con n o más ocurrencias de una \s{2,} coincide con al menos a
expresión regular X. dos caracteres de espacio.
X{m,n} Coincide con m a n ocurrencias de \d{2,4} coincide con al menos 2
una expresión regular X. pero no más de cuatro dígitos.
X? Coincide con cero o una ocurrencias de a\s?b coincide con "ab" o "a
una b".
expresión regular X. Equivale a {0,1}
X* Coincide con cero o más ocurrencias de /ab*c/ coincide con "ac", "abc",
una "abbc", "abbbc", etc.
expresión regular X. Equivale a {0,}
X+ Coincide con una o más ocurrencias de ab+c coincide con "abc", a "abbc",
una a "abbbc", etc.
expresión regular X. Equivale a {1,}

Metacaracteres de Frontera
Los metacaracteres de frontera nos permiten especificar en qué parte de una
cadena buscar por una coincidencia con la expresión regular. Algunos de estos
metacaracteres se muestran en la tabla 11.5.

Tabla 11.5. Metacaracteres de Frontera


Patr Descripción Ejemplo
ón
^ Sólo busca coincidencias al ^hola coincide con “hola” pero no con
inicio de una línea “dijo hola”
$ Sólo busca coincidencias al $ola coincide con “hola” pero no a
final de una línea “olas”

Tabla 11.5. Metacaracteres de Frontera. Cont.


Patr Descripción Ejemp
ón lo
\b Busca coincidencias en cualquier Ola\b coincide sólo con la primera “ola”
frontera de palabra en “hola le dijo a las olas”
(principio o final de una
palabra).
\B Busca coincidencias en \Bola coincide sólo con la primera “ola”
cualquier lugar excepto en las en “hola le dijo a las olas”
frontera de
palabra
\A Sólo busca coincidencias al
inicio de la secuencia completa
\z Sólo busca coincidencias al final
de la secuencia completa
Busca coincidencias al final de \Gola coincide dos veces en “olaolas”
\G
de la coincidencia anterior

Captura de Grupos
La captura de grupos nos permite tratar múltiples caracteres como si fueran una
unidad simple. Para capturar un grupo se encierran los caracteres que forman
el grupo entre paréntesis, (), tabla 11.6.

Tabla 11.6 Alternado o Agrupado

Símbol Descripci Ejemp


o ón lo
( ) Agrupa caracteres para crear una (abc)+(def) coincide con una o
cláusula. Pueden ir anidados más ocurrencias de "abc", seguidas
de una
ocurrencia de "def".
La porción de la cadena que coincide al grupo capturado se almacena para futura
referencia. Los grupos capturados se enumeran contando el número de paréntesis
izquierdos de izquierda a derecha. Por ejemplo en la expresión ((A)(B(C))) hay
cuatro grupos:

1. ((A)(B(C)))

2. (A)

3. (B(C))

4. (C)

Hay un grupo especial llamado grupo 0 que representa la expresión completa,


pero que no se incluye en la cuenta de grupos.

Referencias
Para hacer referencia a la porción de la cadena que coincide al grupo capturado
dentro de una expresión regular se usa el carácter diagonal invertida ‘\’ seguido
del número del grupo capturado. Por ejemplo, la expresión regular (\d\d)\1 nos
indica que se va a capturar un grupo formado por dos dígitos contiguos, y que el
patrón a ajustar serán esos dos dígitos seguidos de los mismos dos dígitos.

La expresión regular anterior coincide con “1212” pero no con “1234


Búsquedas Hacia Adelante y Hacia Atrás
Las operaciones de búsqueda hacia adelante nos permiten crear expresiones
regulares para determinar si un patrón va seguido o no de otro patrón en una
cadena.

Las operaciones de búsqueda hacia atras nos permiten crear expresiones


regulares para determinar si un patrón termina o no en otro patrón en una cadena.

En la tabla 11.7 se muestran las diferentes operaciones de búsqueda hacia


adelante y hacia atrás. Estas operaciones no crean una referencia numerada para
los caracteres que coinciden con la expresión regular dentro de los paréntesis.

Tabla 11.7 Alternado o Agrupado

Símbol Descripci Ejemp


o ón lo
(?:X) Coincide con la expresión regular X (?:.d){2} coincide pero no captura a
pero no la captura. cdad".
X(?=Y) Coincide con la expresión regular X Juan (?=Perez) coincide con "Juan"
si y sólo sí va seguida de la en "Juan Perez" pero no en "Juan
expresión regular Y. Y no forma Ramos" o en "Juan Lopez".
parte del patrón al que se va a
ajustar la cadena, sólo es una Juan (?=Perez|Lopez) coincide con
condición para el ajuste. "Juan" en "Juan Perez" o en "Juan
. Lopez" pero no en "Juan Ramos".
x(?!y) Coincide con la expresión regular X ^\d+ (?!meses) coincide con "5" en "5
si y sólo sí no va seguida de la dias" o en "5 horas", pero no en "5
expresión regular Y. Y no forma meses".
parte del patrón al que se va a
ajustar la
cadena, sólo es una condición para
el ajuste.
X(? Coincide con la expresión regular X Juan (?<=Perez) coincide con "Juan
<=Y) si y sólo sí termina en la expresión Perez" en "Juan Perez" pero no en
regular Y. Y no forma parte del "Juan Ramos" o en "Juan Lopez".
patrón al que se va a ajustar la
cadena, sólo es una condición para Juan (?=Perez|Lopez) coincide con
el ajuste. "Juan Perez" en "Juan Perez" o en
. "Juan Lopez" " en "Juan Lopez"
pero
no en "Juan Ramos".
x(?<! Coincide con la expresión regular X ^\d+ (?!meses) coincide con "5 dias"
y) si y sólo sí no termina de la en "5 dias" o en "5 horas", en "5
expresión regular Y. Y no forma horas" pero no en "5 meses".
parte del patrón al que se va a
ajustar la cadena, sólo
es una condición para el ajuste.
El paquete java.uti.regex
La API de Java contiene, en el paquete , una serie de clases que nos permiten
determinar si una secuencia de caracteres se ajusta a un patrón definido por una
expresión regular. Esas clases se muestran en el diagrama de clases de la figura
11.1.

La Interfaz MatchResult

interfaz MatchResult declara métodos que nos permiten consultar el resultado de un


ajustar una secuencia de caracteres contra una expresión regular. Los métodos de
esta interfaz se muestran en la figura 11.8.

Tabla 11.8 Métodos de la Interfaz MatchResult


int start()

Regresa la posición, dentro de la secuencia de caracteres, del primer carácter de


una coincidencia.

Lanza:
IllegalStateException - Si no se ha intentado aún ajustar la secuencia de
caracteres al patrón o si no la operación de ajuste previa falló.

Tabla 11.8 Métodos de la Interfaz MatchResult. Cont.


int start(int group)

Regresa la posición, dentro de la secuencia de caracteres capturada por el grupo del


parámetro, del primer carácter de una coincidencia. Si hubo una coincidencia pero no con el
grupo mismo, el método regresa -1.

Lanza:
IllegalStateException - Si no se ha intentado aún ajustar la secuencia de
caracteres al patrón o si no la operación de ajuste previa falló.
IndexOutOfBoundsException – Si no hay un grupo capturado en el patrón con el
índice del parámetro.
int end()

Regresa la posición, dentro de la secuencia de caracteres, después del último carácter de


una coincidencia.

Lanza:
IllegalStateException - Si no se ha intentado aún ajustar la secuencia de
caracteres al patrón o si no la operación de ajuste previa falló.
Tabla 11.8 Métodos de la Interfaz MatchResult. Cont.
int end(int group)

Regresa la posición, dentro de la secuencia de caracteres capturada por el grupo del


parámetro, después del último carácter de una coincidencia. Si hubo una coincidencia pero no
con el grupo mismo, el método regresa -1.

Lanza:
IllegalStateException - Si no se ha intentado aún ajustar la secuencia de
caracteres al patrón o si no la operación de ajuste previa falló.
IndexOutOfBoundsException – Si no hay un grupo capturado en el patrón con el
índice del parámetro.
String group()

Regresa la subsecuencia de la secuencia de caracteres que se ajusta al patrón. Si el


parámetro se ajusta a una cadena vacía, el método regresa una cadena vacía.

Lanza:
IllegalStateException - Si no se ha intentado aún ajustar la secuencia de
caracteres al patrón o si no la operación de ajuste previa falló.
String group(int group)

Regresa la subsecuencia de la secuencia de caracteres capturada por el grupo del parámetro.


Si hubo una coincidencia pero no con el grupo mismo, el método regresa null. Si el
parámetro se ajusta a una cadena vacía, el método regresa una cadena vacía.

Lanza:
IllegalStateException - Si no se ha intentado aún ajustar la secuencia de
caracteres al patrón o si no la operación de ajuste previa falló.
IndexOutOfBoundsException – Si no hay un grupo capturado en el patrón con el
índice del parámetro.
int groupCount()

Regresa el número de grupos en el patrón. No incluye el grupo cero.

La Clase Matcher
La clase Matcher es la máquina que realiza las operaciones de ajuste de una secuencia
de caracteres a un patrón definido por la clase Pattern. Un ajustador, que es una
instancia de la clase Matcher se crean invocando al método matcher() de un patrón, que
es una instancia de la clase Pattern. Algunos de los métodos de la clase Matcher y que
podemos usar para realizar tres diferentes tipos de operaciones de ajuste, se muestran
en la tabla 11.9:
Tabla 11.9 Métodos de la Clase Matcher.
public boolean matches()

Intenta ajustar la secuencia de caracteres completa al patrón. Regresa true si y sólo sí la


secuencia completa se ajusta al patrón.

Si el ajuste tiene éxito, se puede obtener más información usando los métodos: start(),
end(),
y group().
public boolean find()

Intenta encontrar la siguiente subsecuencia de la secuencia de caracteres que se ajusta al


patrón. Regresa true si y sólo sí hay una subsecuencia de la secuencia de caracteres que se
ajusta al patrón. Este método inicia al principio de la secuencia o si la invocación previa tuvo
éxito, y el ajustador no fue restaurado, al primer carácter que no coincidió en el ajuste previo.

Si el ajuste tiene éxito, se puede obtener más información usando los métodos: start(),
end(),
y group().
public boolean find(int start)

Restablece este ajustador y luego intenta encontrar la siguiente subsecuencia de la secuencia


de caracteres que se ajusta al patrón, a partir del índice especificado por el parámetro start.
Regresa true si y sólo sí hay una subsecuencia de la secuencia de caracteres que se ajusta
al patrón, a partir del índice especificado. Las siguientes invocaciones del método find()
iniciarán al primer carácter que no coincidió en este ajuste.

Si el ajuste tiene éxito, se puede obtener más información usando los métodos: start(),
end(), y group().

Lanza:
IndexOutOfBoundsException – Si el parámetro start < 0 o si es mayor a la
longitud de la secuencia de caracteres.
public boolean lookingAt()

Intenta ajustar la secuencia de caracteres al patrón, a partir del inicio de la secuencia. Regresa
true si y sólo sí un prefijo de la secuencia se ajusta al patrón.

Si el ajuste tiene éxito, se puede obtener más información usando los métodos: start(),
end(), y group().
public Pattern pattern()

Regresa el patrón que es interpretado por este ajustador.


public Matcher reset()

Restablece este ajustador. Al restablecerlo se descarta toda su información explícita sobre


su estado y se establece la posición de agregado a cero. El método regresa este ajustador.
Tabla 11.9 Métodos de la Clase Matcher. Cont.
public Matcher reset(CharSequence input)

Restablece este ajustador con una nueva secuencia de caracteres. Al restablecerlo se


descarta toda su información explícita sobre su estado y se establece la posición de
agregado a cero. El
método regresa este ajustador.
public Matcher usePattern(Pattern newPattern)

Cambia el patron usado por este ajustador para encontrar coincidencias al patrón del
parámetro. El método regresa este ajustador.

Este método hace que el ajustador pierda la información acerca de los grupos del último ajuste.
La posición del ajustador en la secuencia de caracteres se mantiene y la última posición de
agregado no se ve afectada.

Lanza:
IllegalArgumentException – Si el parámetro es null.
public String replaceAll(String replacement)

Regresa una cadena en la que cada subsecuencia de la secuencia de caracteres que se ajusta
al patrón es reemplazada por la cadena del parámetro.

Por ejemplo, dada la expresión regular a*b, la secuencia de caracteres


"aabfooaabfooabfoob" y la cadena de reemplazo "-", la invocación a este método regresa
la
cadena "-foo-foo-foo-".
public String replaceFirst(String replacement)

Regresa una cadena en la que la primera subsecuencia de la secuencia de caracteres que


se ajusta al patrón es reemplazada por la cadena del parámetro.

Por ejemplo, dada la expresión regular can, la secuencia de caracteres "zzzcanzzzcanzzz"


y la cadena de reemplazo "gato", la invocación a este método regresa la cadena
"zzzgatozzzcanzzz".
public Matcher appendReplacement(StringBuffer sb, String replacement)

Este método hace las siguientes acciones:

1. Le agrega al StringBuffer del parámetro sb, la subsecuencia de la secuencia


de caracteres desde el punto de agregado hasta antes del primer carácter de la
subsecuencia que se ajusta al patrón.
2. Le agrega al StringBuffer del parámetro sb, la cadena de reemplazo dada
por el parámetro replacement.
3. Establece el valor del punto de reemplazo a la siguiente posición del último carácter de
la subsecuencia que se ajusta al patrón.

Lanza:
IllegalStateException - Si no se ha intentado aún ajustar la secuencia de
caracteres al patrón o si no la operación de ajuste previa falló.
Tabla 11.9 Métodos de la Clase Matcher. Cont.
public StringBuffer appendTail(StringBuffer sb)

Este método lee caracteres de la secuencia de entrada a partir de la posición de agregado y


los agrega al StringBuffer del parámetro sb.

Este método se usa normalmente junto con los métodos find() y appendReplacement()
para hacer una búsqueda y reemplazo. Por ejemplo, el siguiente código le agrega al
StringBuffer sb, la secuencia "un gato, dos gatos en el patio":

Pattern p = Pattern.compile("gato");
Matcher m = p.matcher("un perro, dos perros en el patio
"); StringBuffer sb = new StringBuffer();
while (m.find())
{ m.appendReplacement(sb,
"dog");
}
m.appendTail(sb);

La Clase Pattern
La clase Pattern es una representación compilada de una expresión regular.

Una cadena con una expresión regular debe compilarse a una instancia de esta
clase. El patrón resultante puede crearse para crear un ajustador que pueda ajustar
secuencias de caracteres a expresiones regulares.

Algunos de los atributos y métodos de la clase Pattern y que podemos usar para
realizar tres diferentes tipos de operaciones de ajuste, se muestran en laa tablas 11.10
y 11.11:

Tabla 11.10 Atributos de la Clase Pattern.


public static final int CASE_INSENSITIVE

Establece que el ajuste se hará sin hacer distinción entre minúsculas y mayúsculas.
public static final int MULTILINE

Activa el modo multilínea.

En el modo multilínea los metacaracteres ^ y $ se ajustan hasta después o hasta antes de un


carácter terminador de línea o el final de la secuencia de entrada, respectivamente. Por
omisión los metacaracteres sólo se ajustan al principio y final de la secuencia de caracteres
completa.
public static Pattern compile(String regex)

Compila la expresión regular del parámetro a un

patrón Lanza:
PatternSyntaxException - Si la sintaxis de la expresión regular es inválida.

CONCLUSIÓN
Las expresiones regulares vienen a tapar un hueco en el JDK de Sun que venia siendo solicitado desde hace
mucho tiempo. Con la inclusión de las expresiones regulares Java se convierte, en este tema, en un
lenguaje de programación tan flexible como otros mas tradicionales en el tema de las expresiones
regulares, Perl, Awk, etc... Hasta ahora la unica opción para conseguir un efecto parecido era el uso de
StringTokenizer en conjunción con llamadas repetidas al método charAt que producía un código
demasiado enrevesado. Las expresiones regulares tienen un amplio abanico de posibilidades,
principalmente para hacer búsquedas, para sustituir ocurrencias y para comprobar la buena formación de
cadenas.

También podría gustarte