You are on page 1of 8

Expresiones Regulares (REGEXP)

By howtooracle.es

on Jun 05, 2013

in REGEXP, Sql

A partir de la versin 10g, con la introduccin de las llamadas funciones


REGEXP (REGular EXPressions), Oracle nos ofrece una batera de
sofisticadas y potentes herramientas nativas que permiten al desarrollador
centralizar el procesamiento intensivo de cadenas de caracteres dentro de
la base de datos Oracle y con los lenguajes SQL y PL/SQL.
Qu son las Expresiones Regulares?
Sin embargo, un buen manejo de las expresiones regulares es algo tan
poderoso que vale la pena que nos tomemos un tiempo para aprender a
utilizarlas. Adems, saber manejar expresiones regulares nos servir no
solamente en el mundo de las bases de datos Oracle; las podremos usar
tambin en otros lenguajes de programacin como Perl, Java, .Net, Php y
Unix Shell Scripting, entre otros.
Una expresin regular como una cadena de caracteres que definen un
patrn de bsqueda. En una expresin regular encontramos literales y
metacaracteres. Los literales se leen al pie de la letra. Los metacaracteres
son caracteres que tienen un significado especial.
Tomemos por ejemplo la siguiente expresin regular:
[p|m]apa
Los metacaracteres son los corchetes y el smbolo pipe (|). El resto son
literales.
Los corchetes agrupan a varios caracteres en un solo carcter.
El smbolo pipe indica un smbolo u otro; es decir la p o la m.

Luego, la expresin regular:


[p|m]apa
Coincide con las cadenas:
papa
mapa
Para qu sirven las Expresiones Regulares?
En una base de datos Oracle existen diversos escenarios en que la
implementacin de expresiones regulares constituye una herramienta de
gran utilidad:
Bsqueda de texto. Las expresiones regulares nos permiten hacer

bsquedas complejas de cadenas de caracteres dentro de las columnas


de nuestras tablas.
Formateo de datos. Podemos modificar los datos proyectados en

las sentencias SELECT, invirtiendo palabras, agregando o quitando


caracteres, etc.
Definicin de constraints. A fin de forzar el contenido de una

columna para que se ajuste a un formato determinado: casilla de correo,


nmero telefnico, etc.
Manipulacin de datos. Por ejemplo, regularizando datos en

procesos de migracin desde aplicaciones legacy y aplicando reglas de


bsqueda y reemplazo (Search & Replace).
#

Operador

Descripcin

()

Considera a toda la expresin entre parntesis como una unidad.


La expresin puede ser una simple cadena de literales o una
expresin compleja conteniendo otros metacaracteres.

[]

Debe coincidir cada carcter de la lista entre corchetes. Ej.

ma[pms]a encuentra (mapa, masa, mama) y no encuentra (mata)

[^]

No debe coincidir ningn caracter de la lista entre corchete. Ej.


ma[^pms]a (mata, mala) y no encuentra (mapa)

[..]

POSIX collation element.

[::]

POSIX character class. Ver las dos siguientes tablas.

[==]

POSIX character equivalence class. Ej. [=e=] representa e, , , ,

El metacaracter punto coincide con cualquier carcter. Ej. ma.a


(mapa,masa,mata,)

Coincide con cero o una ocurrencia de la subexpresin que le


precede al asterisco. Ej. map?a (mapa, maa)

Coincide con cero o ms ocurrencias de la subexpresin que le


precede al asterisco. Ej. map*a (mapa, mappa, mappppa, maa)

El metacaracter suma coincide con una o ms ocurrencias de la


subexpresin que lo precede. Ej. ma+a (mapa, mapppa,
mappppppa)

{n1}

Empareja exactamente n1 ocurrencias de la subexpresin


precedente. Ej. a{5} (aaaaa)

12

{n1,}

Empareja al menos n1 ocurrencias de la subexpresin


precedente. Ej. a{5,} (aaaaa, aaaaaa, aaaaaaa, )

13

{n1,n2}

Empareja entre n1 y n2 ocurrencias de la subexpresin


precedente. Ej. a{3,5} (aaa, aaaa, aaaaa)

10

11

14

Precediendo a un metacaracter con el smbolo de escape, el


metacaracter ser interpretado como un literal. El doble carcter
de escape (\) permite considerar al carcter de escape como
literal. Ej. *hola* (*hola*) Ej. \hola (hola)

15

Debe coincidir la n-sima subexpresin que le precede.

16

Logical OR. Ej. [v|b]aca (vaca, baca)

Coincide con el principio de lnea y el operador est representado


con el carcter sombrerito (^). Ej. ^hola (hola, holamundo, )

Coincide con el final de lnea y el operador est representado con


el carcter pesos ($). Ej. hola$ (hola, mundohola, )

17

18

El item 5 son entradas para character classes, los cuales son


independientes del character set y su descripcin ser mostrada en la tabla
siguiente .
Character
Class

All Characters of type

[:alnum:]

Representa un carcter alfanumrico. Incluye letras y nmeros.


Omite smbolos de puntuacin.

[:alpha:]

Incluye letras solamente.

[:blank:]

Espacio en blanco.

[:cntrl:]

Carcter de control.

[:digit:]

Carcter Numrico.

[:graph:]

Toda la combinacin de character class [:punct:] , [:upper:],


[:lower:], [:digit:]

[:lower:]

Representa un carcter en minscula.

[:print:]

Representa un carcter que se puede imprimir.

[:punct:]

Punctuation characters.

[:space:]

Representa un espacio.

[:upper:]

Representa un carcter en mayscula.

[:xdigit:]

Valid hexadecimal characters.

La siguiente tabla muestra Character Ranges.


Range

All Characters of Type

[A-Z]

All upercase alphabetic characters.

[a-z]

All lowercase characters.

[0-9]

All numeric digits.

[1-9]

All numeric digits excluding zero.

Regular Expression Function


Para poder hacer uso de todo lo visto hasta ahora Oracle SQL incluye un
grupo de nuevas funciones y condiciones para poder manejar expresiones
regulares a partir de la versin 10g :
Regular Expression
Funciton

REGEXP_SUBSTR
REGEXP_INSTR

Parmetros

Descripcin

(s1, pattern, p1, n1, m1)s1


Funcin para extraer
cadena de caracteresPattern
de una cadena una
expresin regularp1 numrico
subcadena de
opcional (default 1)n1
caracteres que
numrico opcional (default
coincidan con un
1)m1 1 o ms parmetros (ver patrn especificado en
tabla siguiente). Opcional
una expresin regular.
(s1, pattern, p1, n1, opt1,
m1)s1 cadena de
caracteresPattern expresin
regularp1 numrico opcional

Funcin que permite


determinar la posicin
de inicio de un patrn
especfico en una

REGEXP_REPLACE

(default 1)n1 numrico


opcional (default 1)opt1
numrico (0 o 1). Opcional
(Default 0)m1 1 o ms
parmetros (ver tabla
siguiente). Opcional

cadena de caracteres.

(s1, pattern, rep1, p1, o1,


m1)s1 cadena de
caracteresPattern expresin
regularRep1 cadena, opcional.
(Default NULL)p1 numrico
opcional (default 1)o1
numrico opcional (default
0)m1 1 o ms parmetros (ver
tabla siguiente). Opcional

Funcin que permite


hacer bsqueda y
reemplazo en una
cadena de caracteres
utilizando expresiones
regulares para la
bsqueda.

La siguiente tabla muestra los valores posibles del parmetro m1 en las


anteriores funciones:
Parameter Value

Descripcin

utiliza una correspondencia sensible a maysculas/minsculas


(por defecto)

utiliza una correspondencia no sensible a maysculas/minsculas

permite el operador de correspondencia con cualquier carcter

trata la cadena de origen como varias lneas

Ignora caracteres espacios en blanco

Junto con las regular expression functions tenemos una regular expression
condition:
Regular Expression
Condition
REGEXP_LIKE

Parmetros

Descripcin

(s1, pattern, m1)s1


cadena de

Condicin que se puede


utilizar en la clusula

caracteresPattern
expresin regularm1 1 o
ms parmetros (ver tabla
anterior). Opcional

WHERE de una sentencia


SQL SELECT y que permite
retornar aquellas filas que
coinciden con el patrn
especificado en una
expresin regular.

Vamos a ver algunos ejemplos (pulsa sobre la imagen para verlo mejor):

Expresiones Regulares y CHECK Constraints


Se pueden utilizar expresiones regulares para filtrar los datos que se permiten entrar
en un tabla mediante restricciones. El siguiente ejemplo muestra cmo podra ser
configurado una columna para permitir slo caracteres alfabticos dentro de una
columna VARCHAR2. Esto le denegar signos de puntuacin, dgitos, elementos de
separacin,
CREATE TABLE t1 (
c1 VARCHAR2(20), CHECK
(REGEXP_LIKE(c1, ^[[:alpha:]]+$)));

INSERT INTO t1 VALUES (newuser);


-> 1 row created.
INSERT INTO t1 VALUES (newuser1);
-> ORA-02290: check constraint violated