|
Expresiones Regulares en Delphi
Copyright © 2000 Ernesto
De Spirito
¿Qué son expresiones regulares?
Las expresiones regulares son una forma de buscar y reemplazar patrones
de texto. En cierta forma estos patrones son como usar los caracteres
comodines '?' y '*' al buscar archivos, pero las
expresiones regulares son inmensamente más poderosas que eso. En el patrón
uno puede especificar si la cadena que se busca debe estar al principio o
al final de una línea, qué caracteres se permiten, cuántas veces se pueden
repetir y muchas cosas más.
¿Para qué se usan?
Básicamente se usan para tres propósitos:
Poder de búsqueda (y reemplazo) de texto
Puede usar expresiones regulares por ejemplo para buscar un registro
específico en una base de datos de una manera mucho más poderosa que
usando el operador SQL LIKE.
Validación de datos
Con las expresiones regulares puede validar la entrada del usuario
para verificar si sigue un formato dado que debido a su complejidad u
variabilidad no se puede chequear con máscaras. Por ejemplo, puede
chequear si una cadena comienza opcionalmente con un signo más o
menos, luego una secuencia de no más de siete dígitos y opcionalmente
una coma seguida de hasta dos dígitos.
Extracción de datos
No sólo que puede chequear si una cadena sigue un cierto patrón, sino
que puede extraer arbitrariamente partes del texto. Por ejemplo, para
un número de teléfono como '+1 (123) 555-9999' usted puede extraer el
código de país ('1'), código de área ('123') y el número local
('555-9999').
Biblioteca freeware TRegExpr
¿Quiere implementar expresiones regulares en sus aplicaciones Delphi?
Una buena forma de hacerlo es usando la biblioteca TRegExpr, que es
freeware y viene con código fuente completo y está documentada en
varios lenguajes. Esta biblioteca ha sido desarrollada por Andrey V.
Sorokin portando el código en C de las conocidas rutinas V8 de Henry
Spencer (un subconjunto de las expresiones regulares de Perl) a Object
Pascal. La última versión de la biblioteca es 0.942 y la puede obtener
desde "AnSo @ Web" (el sitio web de Sorokin) en:
Ejemplos
La sintaxis de las expresiones regulares V8 está bien documentada en el
archivo de ayuda y también puede encontrar muchas fuentes de documentación
en la Internet, así que no vamos a adentrarnos en eso, pero sí vamos a
mostrar un par de ejemplos del uso de la biblioteca:
uses RegExpr;
procedure TForm1.Button1Click(Sender: TObject);
// Valida la dirección de email en Edit1
begin
// Aviso: este código no debe ser usado para realizar validación
// real de email. Debe chequear la especificación RFC. Esto es
// sólo una simplificación para mostrar el uso de ExecRegExpr.
if not ExecRegExpr('[\w\d\-\.]+@[\w\d\-]+(\.[\w\d\-]+)+',
Edit1.Text) then begin
ShowMessage('La dirección de email no es válida');
Edit1.SetFocus;
end else
ShowMessage('La dirección de email es válida');
end;
procedure TForm1.Button2Click(Sender: TObject);
// Extrae direcciones de email contenidas en Memo1
var
RegExpr: TRegExpr;
begin
// Aviso: este código no extraerá todas las direcciones de email
// válidas. Esto es sólo una simplificación para mostrar el uso de
// Exec, ExecNext y Match.
ListBox1.Clear;
RegExpr := nil;
try
RegExpr := TRegExpr.Create;
if RegExpr <> nil then begin
RegExpr.Expression := '[^\w\d\-\.]([\w\d\-\.]+@[\w\d\-]+'
+ '(\.[\w\d\-]+)+)[^\w\d\-\.]';
if RegExpr.Exec(Memo1.Text) then
repeat
ListBox1.Items.Add(RegExpr.Match[1]);
until not RegExpr.ExecNext;
end;
except
end;
RegExpr.Free;
end;
Puede encontrar el código fuente completo de este artículo en el archivo que acompaña al Boletín Pascal #21.
|