Cómo funciona

Ejemplos simples

Si no tiene experiencia con las expresiones regulares, por favor vea la sección sintaxis.

Usando las rutinas globales

Es simple pero poco flexible y efectivo

ExecRegExpr ('\\d{3}-(\\d{2}-\\d{2}|\\d{4})', 'Teléfono: 555-1234');

devuelve True

ExecRegExpr ('^\\d{3}-(\\d{2}-\\d{2}|\\d{4})', 'Teléfono: 555-1234');

devuelve False, porque hay algunos símbolos antes del número de teléfono y estamos usando el metasímbolo ‘^’ (BeginningOfLine = Inicio de línea)

ReplaceRegExpr (‘producto’, ‘Pruebe producto. producto es el mejor !’, ‘TRegExpr’);

devuelve ‘Pruebe TRegExpr. TRegExpr es el mejor !’; ;)

Usando la clase TRegExpr

Se obtiene todo el poder de la librería

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
// Esta simple función extrae todas las direcciones de email de la cadena ingresada
// y devuelve una lista de estos email en el resultado
function ExtraeEmails (const AInputString : string) : string;
const
         EmailRE ='\[\_a-zA-Z\\d\\-\\.\][email protected]\[\_a-zA-Z\\d\\-\]+(\\.\[\_a-zA-Z\\d\\-\]+)+'
var
         r : TRegExpr;
begin
         Result := '';
         r := TRegExpr.Create; // Crea el objeto
         try // asegura la liberación de memoria
                         r.Expression := EmailRE;
                         // La e.r. se compila automáticamente en estructuras internas
                         // cuando se asigna la propiedad Expression
                         if r.Exec (AInputString) then
                                         REPEAT
                                                         Result := Result + r.Match \[0\] + ', ';
                                         UNTIL not r.ExecNext;
                         finally r.Free;
         end;
end;
begin
         ExtraeEmails ('Mis e-mails son [email protected] y [email protected]');
         // devuelve '[email protected], [email protected], '
end.
// Nota: la compilación de la r.e. realizada al asignar ;a propiedad Expression
// toma cierto tiempo, si se usa esta función muchas veces
// se sobrecarga inútilmente.
// Esto se puede optimizar significativamente creando el objeto TRegExpr
// y precompilando la expresión durante la inicialización del programa.

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
// Este ejemplo extrae números de teléfono
// y los descompone en partes (códigos de Ciudad y país, númerotelefónico                ).
// Después substituye estas partes en la máscara ingresada.
function ParseTel (const AInputString, ATemplate : string) : string;
const
         IntPhoneRE = '(\\+\\d \*)?(\\(\\d+\\) \*)?\\d+(-\\d\*)\*';
var
         r : TRegExpr;
begin
         r := TRegExpr.Create; // Crea el objeto
         try // asegura la liberación de memoria
                         r.Expression := IntPhoneRE;
                         // La e.r. se compila automáticamente en estructuras internas
                         // cuando se asigna la propiedad Expression
                         if r.Exec (AInputString)
                                         then Result := r.Substitute (ATemplate)
                                         else Result := '';
                         finally r.Free;
         end;
end;
begin
         ParseTel ('El teléfono de AlkorSoft (proyecto PayCash) es +7(812) 329-44-69',
         'Código de País $1, código de ciudad $2. El número telefónico completo es $&.');
         // devuelve 'Código de País +7, código de ciudad (812) . El número telefónico completo es +7(812) 329-44-69.'
end.

Ejemplos más complejos

Se pueden encontrar ejemplos más complejos del uso de TRegExpr en el proyecto TestRExp.dpr y HyperLinkDecorator.pas.

Ver también mis artículos en Delphi3000.com (Inglés) y Delphi Kingdom (Ruso).

 

Explicación detallada

Por favor, ver la descripcion de la interface de TRegExpr.