Área de Tecnologías de la Información y las Comunicaciones Aplicadas
Área de Tecnologías de la Información y las Comunicaciones Aplicadas Universidad de Murcia
Área de Tecnologías de la Información y las Comunicaciones Aplicadas
ATICA
21.09.2017
 
 
PLSQL - Expresiones regulares Imprimir E-mail

Oracle 10g soporta expresiones regulares en el código SQL y PL/SQL, mediante las siguientes funciones:

  • REGEXP_INSTR - Similar a INSTR excepto que usa una expresión regular en lugar de un literal como cadena de búsqueda.

  • REGEXP_LIKE - Similar a LIKE excepto que usa una expresión regular como cadena de búsqueda.

  • REGEXP_REPLACE - Similar a REPLACE excepto que usa una expresión regular como cadena de búsqueda.

  • REGEXP_SUBSTR - Devuelve la cadena que cumple la expresión regular. NO se parece a SUBSTR.

Oracle 11g incluye la función REGEXP_COUNT, que permite contar las ocurrencias de una cadena dentro de otra, usando expresiones regulares.


Los siguientes ejemplos muestran como se usan estas funciones con una expresión regular simple para validar un número de tarjeta de crédito ('[0-9]{4} [0-9]{4} [0-9]{4} [0-9]{4}'):

SET SERVEROUTPUT ON
DECLARE

l_text VARCHAR2(100) := 'My credit card details are: 1234 1234 1234 1234';
l_regular_expr VARCHAR2(50) := '[0-9]{4} [0-9]{4} [0-9]{4} [0-9]{4}';

l_credit_card_1 VARCHAR2(50) := '1234 1234 1234 1234';
l_credit_card_2 VARCHAR2(50) := '123c 1234 1234 1234';
BEGIN
-- REGEXP_INSTR
IF REGEXP_INSTR(l_text, l_regular_expr) > 0 THEN
DBMS_OUTPUT.put_line('REGEXP_INSTR: Your input contains credit card details, this is a security risk!');
END IF;

-- REGEXP_LIKE
IF REGEXP_LIKE(l_credit_card_1, l_regular_expr) THEN
DBMS_OUTPUT.put_line('REGEXP_LIKE: Good Credit Card: ' || l_credit_card_1);
END IF;
IF NOT REGEXP_LIKE(l_credit_card_2, l_regular_expr) THEN
DBMS_OUTPUT.put_line('REGEXP_LIKE: Bad Credit Card : ' || l_credit_card_2);
END IF;

-- REGEXP_REPLACE
DBMS_OUTPUT.put_line('REGEXP_REPLACE: Before: ' || l_text);
DBMS_OUTPUT.put_line('REGEXP_REPLACE: After : ' || REGEXP_REPLACE(l_text, l_regular_expr, '**** **** **** ****'));

-- REGEXP_SUBSTR
DBMS_OUTPUT.put_line('REGEXP_SUBSTR: Matching String : ' || REGEXP_SUBSTR(l_text, l_regular_expr));

END;
/

Ejemplo con REGEXP_COUNT para contar las ocurrencias de una cadena dentro de otra:

select regexp_count('abra cadabra pata de cabra', 'bra') from dual;

REGEXP_COUNT('ABRACADABRAPATADECABRA','BRA')
--------------------------------------------
                       3

Algunos ejemplos de expresiones regulares:

Cualquier letra en minuscula [a-z]
Entero ^(?:\+|-)?\d+$

Correo electrónico

/[\w-\.]{3,}@([\w-]{2,}\.)*([\w-]{2,}\.)[\w-]{2,4}/

URL

^(ht|f)tp(s?)\:\/\/[0-9a-zA-Z]([-.\w]*[0-9a-zA-Z])*(:(0-9)*)*(\/?)( [a-zA-Z0-9\-\.\?\,\'\/\\\+&%\$#_]*)?$

Fecha

^\d{1,2}\/\d{1,2}\/\d{2,4}$
(Por ejemplo 01/01/2007)

Hora ^(0[1-9]|1\d|2[0-3]):([0-5]\d):([0-5]\d)$
(Por ejemplo 10:45:23)

Número tarjeta de crédito

^((67\d{2})|(4\d{3})|(5[1-5]\d{2})|(6011))(-?\s?\d{4}){3}|(3[4,7])\ d{2}-?\s?\d{6}-?\s?\d{5}$

Número teléfono

^[0-9]{2,3}-? ?[0-9]{6,7}$

Nº Tlf extranjeros

^(\+[0-9]{9,19})$|^([0-9]{9,20})$

Código postal

^([1-9]{2}|[0-9][1-9]|[1-9][0-9])[0-9]{3}$

Certificado Identificación Fiscal

^(X(-|\.)?0?\d{7}(-|\.)?[A-Z]|[A-Z](-|\.)?\d{7}(-|\.)? [0-9A-Z]|\d{8}(-|\.)?[A-Z])$



Fuentes:

Creado 11/03/2013

Última modificación ( 21.06.2017 )
 
Área de Tecnologías de la Información y las Comunicaciones Aplicadas
Volver al incio del documento Volver al inicio del documento
Área de Tecnologías de la Información y las Comunicaciones Aplicadas