Documente Academic
Documente Profesional
Documente Cultură
1 de 8
http://programacion.net/articulo/expresiones_regulares_en_java_127
(/)
Artculos (/articulos)
30
Compartir
Las expresiones regulares son algo que se usa desde hace aos en otros lenguajes de
programacin como Perl, Sed o Awk. En la versin 1.4 del JDK de Sun se incluye el paquete
java.util.regex, que proporciona una serie de clases para poder hacer uso de la potencia de
este tipo de expresiones en Java. Antes de nada necesitamos saber qu es una expresin regular
y para que nos puede servir:
Pues bien, una expresin regular es un patrn que describe a una cadena de caracteres. Todos
hemos utilizado alguna vez la expresin *.doc para buscar todos los documentos en algn lugar
de nuestro disco duro, pues bien, *.doc es un ejemplo de una expresin regular que representa a
todos los archivos con extensin doc, el asterisco significa cualquier secuencia de caracteres (vale,
los que ya conozcan esto dirn que no es correcto, y dirn bien, es mas preciso hablar de *.doc
pero el ejemplo es muy grfico).
Las expresiones regulares se rigen por una serie de normas y hay una construccin para cualquier
patrn de caracteres. Una expresin regular slo puede contener (aparte de letras y nmeros) los
siguientes caracteres:
<
$, ^, ., *, +, ?, [, ], .
>
Una expresin regular, nos servir para buscar patrones en una cadena de texto, por ejemplo
encontrar cuantas veces se repite una palabra en un texto, para comprobar que una cadena tiene
25/11/2016 1:28
2 de 8
http://programacion.net/articulo/expresiones_regulares_en_java_127
una detereminada estructura, por ejemplo que el nombre de archivo que nos proponen tiene una
determinada extensin, o comprobar que un email esta bien escrito... Para cada uno de estos
casos existe una expresin regular que los representa:
Por medio de la expresin regular "camion" podemos encontrar cuantas veces se repite
camin en un texto. Es la construccin mas sencilla.
Esta expresin "^www.*.es" comprueba que una cadena sea una direccin web que
30
Compartir
25
Uso
5
El paquete java.util.regex esta formado por dos clases, la clase Matcher y la clase
Pattern y por una excepcin, PatternSyntaxException.
La clase Pattern (segun la documentacion del jdk1.4) es la representacion compilada de una
expresion regular, o lo que es lo mismo, representa a la expresion regular, que en el paquete
java.util.regex necesita estar compilada. En castellano significa patrn.
La clase Matcher es un tipo de objeto que se crea a partir de un patrn mediante la invocacin
del mtodo Pattern.matcher. Este objeto es el que nos permite realizar operaciones sobre la
secuencia de caracteres que queremos validar o la en la secuencia de caracteres en la que
queremos buscar. En castellano lo mas parecido a esto es la palabra encajador.
Por lo tanto tenemos patrones que deben ser compilados, a partir de estos creamos objetos
Matcher (encajadores) para poder realizar las operaciones sobre la cadena en cuestin.
Vamos con la clase Pattern, para crear un patrn necesitamos compilar una expresin regular,
esto lo conseguimos con el mtodo compile:
Pattern patron = Pattern.compile("camion");
El mtodo pattern devuelve la expresin regular que hemos compilado, el mtodo matcher crea
un objeto Matcher a partir del patrn, el mtodo split divide una cadena dada en partes que
cumplan el patrn compilado y por ltimo el mtodo matches compila una expresin regular y
comprueba una cadena de caracteres contra ella.
Ahora la clase Matcher. Esta clase se utiliza para comprobar cadenas contra el patrn indicado.
Un objeto Matcher se genera a partir de un objeto Pattern por medio del mtodo matcher:
Pattern patron = Pattern.compile("camion");
Matcher encaja = patron.matcher();
Una vez que tenemos el objeto creado, podemos realizar tres tipos de operaciones sobre una
cadena de caracteres. Una es a travs del mtodo matches que intenta encajar toda la secuencia
en el patrn (para el patrn "camion" la cadena "camion" encajara, la cadena "mi camion es verde"
no encajara). Otra es a travs del mtodo lookingAt, intenta encajar el patrn en la cadena
(para el patrn "camion" tanto la cadena "camion" como la cadena "mi camion es verde" encajaria).
Otra es la proporcionada por el mtodo find que va buscando subcadenas dentro de la cadena
de caracteres que cumplan el patrn compilado (una vez encontrada una ocurrencia, se puede
inspeccionar por medio de los mtodos start que marca el primer carcter de la ocurrencia en la
secuencia y el mtodo end que marca el ultimo carcter de la ocurrencia). Todos estos mtodos
25/11/2016 1:28
3 de 8
http://programacion.net/articulo/expresiones_regulares_en_java_127
25
Ejemplos
El siguiente es un ejemplo del uso del mtodo replaceAll sobre una cadena. El ejemplo sustituye
todas las apariciones que concuerden con el patron "a*b" por la cadena "-".
// se importa el paquete java.util.regex
import java.util.regex.*;
public class EjemploReplaceAll{
public static void main(String args[]){
// compilamos el patron
Pattern patron = Pattern.compile("a*b");
// creamos el Matcher a partir del patron, la cadena como parametro
Matcher encaja = patron.matcher("aabmanoloaabmanoloabmanolob");
// invocamos el metodo replaceAll
String resultado = encaja.replaceAll("-");
System.out.println(resultado);
}
}
El siguiente ejemplo trata de validar una cadena que supuestamente contiene un email, lo hace
con cuatro comprobaciones, con un patrn cada una, la primera que no contenga como primer
caracter una @ o un punto, la segunda que no comience por www. , que contenga una y solo una
@ y la cuarta que no contenga caracteres ilegales:
25/11/2016 1:28
4 de 8
http://programacion.net/articulo/expresiones_regulares_en_java_127
import java.util.regex.*;
30
Compartir
25
Conclusin
Las expresiones regulares vienen a tapar un hueco en el JDK de Sun que venia siendo solicitado
desde hace mucho tiempo. Con la inclusin de las expresiones regulares Java se convierte, en
este tema, en un lenguaje de programacin tan flexible como otros mas tradicionales en el tema de
las expresiones regulares, Perl, Awk, etc... Hasta ahora la unica opcin para conseguir un efecto
parecido era el uso de StringTokenizer en conjuncin con llamadas repetidas al mtodo charAt que
produca un cdigo demasiado enrevesado. Las expresiones regulares tienen un amplio abanico
de posibilidades, principalmente para hacer bsquedas, para sustituir ocurrencias y para
comprobar la buena formacin de cadenas, como se ha visto en el ejemplo del email.
Enlaces
25/11/2016 1:28
5 de 8
http://programacion.net/articulo/expresiones_regulares_en_java_127
25
Apndice A
Lo que viene a continuacin no es mas que la traduccin del la documentacin de una parte de la
clase Pattern. Para una referencia completa puede consultar la versin en ingles de Sun inc. sobre
la clase Pattern en http://java.sun.com/j2se/1.4/docs/api/java/util/regex/Pattern.html
(http://java.sun.com/j2se/1.4/docs/api/java/util/regex/Pattern.html).
Expresion
Encaja con
Caracteres
x
n
nn
mnn
xhh
uhhhh
f
a
e
cx
El caracter x
El caracter
El caracter con valor octal 0n (0 <= n <= 7)
El caracter con valor octal 0nn (0 <= n <= 7)
El caracter con valor octal 0mnn (0 <= m <= 3, 0 <= n <= 7)
El caracter con valor hexadecimal 0xhh
El caracter con valor hexadecimal 0xhhhh
El tabulador ('u0009')
Nueva linea (line feed) ('u000A')
Retorno de carro ('u000D')
Nueva pagina ('u000C')
Un beep de alerta (bell) ('u0007')
Escape ('u001B')
El caracter de control que corresponde a x
Intervalos de caracteres
[abc]
[^abc]
[a-zA-Z]
[a-d[m-p]]
[a-z&&[def]]
[a-z&&[^bc]]
[a-z&&[^m-p]]
a, b, o c
Cualquier caracter excepto a, b, o c (negacion)
Desde la a a la z o desde la A hasta la Z, incluidos
Desde la a hasta la d, o desde la m a la p: [a-dm-p] (union)
La d, la e, o la f (interseccion)
Desde la a hasta la z, excepto la b y la c: [ad-z] (resta)
Desde la a hasta la z, excepto desde la m hasta la p: [a-lqz](resta)
Intervalos de caracteres
predefinidos
.
d
D
s
S
w
W
25/11/2016 1:28
6 de 8
30
Compartir
25
Intervalos de caracteres
POSIX
(solo para US-ASCII)
{lower}
{upper}
{alpha}
{digit}
{alnum}
{punct}
{graph}
{print}
{blank}
{cntrl}
{xdigit}
{space}
http://programacion.net/articulo/expresiones_regulares_en_java_127
Limites
^
$
B
A
G
Cuantificadores de cantidad
X?
X*
X+
X{n}
X(n,}
X{n,m}
Operadores logicos
XY
X|Y
(X)
X seguido de Y
XoY
X, como un grupo (/articulos/#cg)
, Escape, y entrecomillado
El caracter () sirve para preceder a expresiones con valores de escape tal y como se define en la
tabla anterior, asi como para entrecomillar caracteres que de otra manera serian interpretados
como caracteres de escape. De este modo la expresion representa a un unico y { representa a una
llave.
Es un error usar un antes de cualquier caracter alfabetico que no corresponda a un caracter de
escape, este tipo de construcciones se reservan para extensiones de futuras versiones del
25/11/2016 1:28
7 de 8
http://programacion.net/articulo/expresiones_regulares_en_java_127
lenguaje de expresiones regulares. El caracter puede ser usado antes de un caracter no alfabetico
a pesar de que el caracter sea parte de una expresion que no sea de escape.
Terminadores de linea
Un terminador de linea es una secuencia de uno o dos caracteres que indica el final de una linea
de la secuencia de caracteres de entrada. Los siguientes son terminadores de linea:
30
Compartir
25
Grupos
Los grupos se numeran contando los parentesis abiertos de izquierda a derecha. En la expresion
((A)(B(C))), por ejemplo, hay cuatro de estos grupos:
1((A)(B(C)))
2(A)
3(B(C))
4(C)
El grupo cero siempre es la expresion completa.
ENVIAR A UN AMIGO
COMPARTIR EN FACEBOOK
COMPARTIR EN TWITTER
COMPARTIR EN GOOGLE +
ARTCULO ANTERIOR
SIGUIENTE ARTCULO
25/11/2016 1:28
8 de 8
30
Compartir
25
http://programacion.net/articulo/expresiones_regulares_en_java_127
La tipografa es la base de cualquier diseo, ya Las marcas cada vez tienen ms modelos de
que leer...
bicicletas...
(http://programacion.net/foros
(http://programacion.net/articulo
(https://strossle.it/home/pets/marchasyrutase
/php/guardar_datos_de_formulario_en_la_bd_344094)
/13_herramientas_tipograficas_que_todos_los_disenadores_deber
/bicicletas-especificas-para-chicas-en-que%C3%ADan_utilizar_1427)
se-diferencian-de-lasde-chicos?utm_source=sprinkle&
La naturaleza
al poder, con mobiliario y
utm_medium=widget-5660161c0bd7a&
Se acercan las Navidades, y seguro que tus
Pillada en 'Zapeando' a Anna Simn y Cristina objetos...
utm_content=programacion.net
(https://strossle.it/home/home_garden
hijos estn...
Pedroche. La...
/decorarnet/la-naturaleza(https://strossle.it/home/hobbies_interests
(https://strossle.it/home/hobbies_interests
al-poder?utm_source=sprinkle&
/guarderiaorg/papa-noel-tiene-un-mensaje/vayafacees/pillan-a-cristina-pedroche-y-anna-
S EL PRIMERO EN COMENTAR!
Conctate (/login) o Regstrate (/registro) para dejar tu comentario.
Secciones
Artculos (/articulos)
Tutoriales y cdigo fuente (/codigos)
Foros (/foros)
Eventos (/eventos)
Empleo (/empleo)
Lenguajes Destacados
PHP (/php)
Java (/java)
ASP (/asp)
Bases de datos (/bases-de-datos)
C (/c)
Informacin
Datos Legales (/datos_legales)
Poltica de privacidad (/politica_de_privacidad)
Publicidad (/publicidad)
Contacto
Contacte con nosotros (/contacto)
Publicidad (/publicidad)
(https://www.facebook.com/programacionencastellano)
(https://twitter.com/noprog)
Diseo web y desarrollo web (http://colorvivo.com). Un proyecto de los hermanos Carrero (http://carrero.es).
Alojado en (http://carrero.es) cloud privado Stackscale (http://www.stackscale.es/)
Ms internet: Password (http://password.es) | Favicon (http://genfavicon.com) | Crear un Avatar (http://face.co)
Copyright 1998-2017 Programacin en Castellano. Todos los derechos reservados
25/11/2016 1:28