Sunteți pe pagina 1din 8

Expresiones Regulares en Java. Programacin en Castellano.

1 de 8

http://programacion.net/articulo/expresiones_regulares_en_java_127

(/)

Conctate (/login) o Regstrate (/registro)


Inicio (/)

Artculos (/articulos)

Expresiones Regulares en Java (/articulo/expresiones_regulares_en_java_127)

30
Compartir

Expresiones Regulares en Java


25

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

Expresiones Regulares en Java. Programacin en Castellano.

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

comience por www y sea de un servidor espaol.


Y esta, para ver la potencia de las expresiones regulares, comprueba la buena formacin de
los correos electrnicos: "[^A-Za-z0-9.@_-~#]+".
[Para ver como formar expresiones regulares puede ir al Apndice A (/articulos/#apa)]

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

Expresiones Regulares en Java. Programacin en Castellano.

3 de 8

http://programacion.net/articulo/expresiones_regulares_en_java_127

devuelven un booleano que indica si la operacin ha tenido xito.


Todo lo anterior esta orientado a la b6uacutesqueda de patrones en cadenas de caracteres, pero
puede que queramos llegar mas all, que lo que queramos sea reemplazar una cadena de
caracteres que se corresponda con un patrn por otra cadena. Por ejemplo un mtodo que
consigue esto es replaceAll que reemplaza toda ocurrencia del patrn en la cadena por la cadena
que se le suministra.
30
Compartir

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

Expresiones Regulares en Java. Programacin en Castellano.

4 de 8

http://programacion.net/articulo/expresiones_regulares_en_java_127

import java.util.regex.*;

30
Compartir

public class ValidacionEmail {


public static void main(String[] args) throws Exception {
String input = "www.?regular.com";
// comprueba que no empieze por punto o @
Pattern p = Pattern.compile("^.|^@");
Matcher m = p.matcher(input);
if (m.find())
System.err.println("Las direcciones email no empiezan por punto o @");
// comprueba que no empieze por www.
p = Pattern.compile("^www.");
m = p.matcher(input);
if (m.find())
System.out.println("Los emails no empiezan por www");

25

// comprueba que contenga @


p = Pattern.compile("@");
m = p.matcher(input);
if (!m.find())
System.out.println("La cadena no tiene arroba");
// comprueba que no contenga caracteres prohibidos
p = Pattern.compile("[^A-Za-z0-9.@_-~#]+");
m = p.matcher(input);
StringBuffer sb = new StringBuffer();
boolean resultado = m.find();
boolean caracteresIlegales = false;
while(resultado) {
caracteresIlegales = true;
m.appendReplacement(sb, "");
resultado = m.find();
}
// Aade el ultimo segmento de la entrada a la cadena
m.appendTail(sb);
input = sb.toString();
if (caracteresIlegales) {
System.out.println("La cadena contiene caracteres ilegales");
}
}
}

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

Expresiones Regulares en Java. Programacin en Castellano.

5 de 8

http://programacion.net/articulo/expresiones_regulares_en_java_127

Java Developers Kit de Sun v.1.4: http://java.sun.com/j2se/ (http://java.sun.com/j2se/)


Documentacion de Sun del paquete java.util.regex: http://java.sun.com/j2se/1.4/docs/api
/java/util/regex/package-summary.html (http://java.sun.com/j2se/1.4/docs/api/java/util/regex
/package-summary.html)
Tutorial de expresiones regulares: http://bulmalug.net/body.phtml?nIdNoticia=770
(http://bulmalug.net/body.phtml?nIdNoticia=770)
30
Compartir

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

Cualquier caracter (puede que no se incluyan los terminadores


de linea (/articulos/#lt))
Un numero: [0-9]
Todo menos un numero: [^0-9]
Un espacio en blanco: [ x0Bf ]
Todo menos un espacio en blanco: [^s]
Una letra: [a-zA-Z_0-9]
Todo menos letras: [^w]

25/11/2016 1:28

Expresiones Regulares en Java. Programacin en Castellano.

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

Letras minusculas: [a-z]


Letras mayusculas:[A-Z]
Letras:[{lower}{upper}]
Numero decimal: [0-9]
Caracter alfanumerico:[{alpha}{digit}]
Signos de puntuacion: uno de !"#$%&'()*+,-./:;<=>?@[]^_`{|}~
Los caracteres visibles: [{alnum}{punct}]
Los caracteres imprimibles: [ {graph}]
Un espacio o un tabulador: [ ]
Un caracter de control: [x00-x1Fx7F]
Un numero hexadecimal: [0-9a-fA-F]
Un espacio: [ x0Bf ]

Limites
^
$
B
A
G

Comienzo de una linea


Fin de una linea
Fin de palabra
No es fin de palabra
El principio de la cadena de entrada
El final del ultimo patron encajado
El final de la entrada pero el terminador (/articulos/#lt) final, si
existe
El final de la cadena de entrada

Cuantificadores de cantidad
X?
X*
X+
X{n}
X(n,}
X{n,m}

X, una o ninguna vez


X, cero o ninguna vez
X, una o mas veces
X, exactamente n veces
X, por lo menos n veces
X, por lo menos n veces pero no mas de m veces

Operadores logicos
XY
X|Y
(X)

X seguido de Y
XoY
X, como un grupo (/articulos/#cg)

Referencias hacia atras


Lo que haya encajado el nesimo 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

Expresiones Regulares en Java. Programacin en Castellano.

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

El caracter de Nueva linea (line feed) (' '),


El caracter de retorno de carro seguido de una nueva linea (" "),
El caracter de retorno de carro unicamente (' '),
El caracter de nueva linea ('u0085'),
El caracter de separacin de linea ('u2028'), o
El caracter de separacion de parrafos ('u2029).
Si el modo UNIX_LINES esta activado entonces los unicos terminadores de linea reconocidos
seran caracteres de nueva linea.
La expresion regular . Representa a cualquier caracter excepto un terminador de linea a no ser que
el modo DOTALL sea especificado.

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.

COMPARTE ESTE ARTCULO

ENVIAR A UN AMIGO

COMPARTIR EN FACEBOOK

COMPARTIR EN TWITTER

COMPARTIR EN GOOGLE +

ARTCULO ANTERIOR

SIGUIENTE ARTCULO

New 2 Java: Construir una Aplicacin: 1.- Objetos de una


El sistema de publicacin en web Cocoon (/articulo
Aplicacin (/articulo
/el_sistema_de_publicacion_en_web_cocoon_128)
/new_2_java_construir_una_aplicacion_1_objetos_de_una_aplicacion_126)

25/11/2016 1:28

Expresiones Regulares en Java. Programacin en Castellano.

8 de 8

Programacion en castellano. Recursos y


documentacion para...

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

S-ar putea să vă placă și