Las expresiones regulares se utilizan para realizar la coincidencia de cadenas. Consulte las tablas siguientes para conocer algunos ejemplos habituales de las expresiones regulares. Para especificar una expresión regular, añada un operador “.REG.” antes del patrón.
Hay una serie de sitios Web y tutoriales en línea donde puede consultar más información. Uno de ellos es el sitio PerlDoc, que puede encontrar en:
http://www.perl.com/doc/manual/html/pod/perlre.html
Las expresiones regulares son una poderosa herramienta de coincidencia de cadenas. Por este motivo, Trend Micro recomienda que los administradores que eligen utilizar las expresiones regulares estén familiarizados con la sintaxis de expresiones regulares. Una expresión regular escrita incorrectamente puede tener nefastos resultados en su funcionamiento. Trend Micro aconseja comenzar con expresiones regulares sencillas que no utilicen una sintaxis compleja. Cuando introduzca nuevas reglas, use la acción de archivado y observe cómo el Messaging Security Agent gestiona los mensajes con su regla. Cuando esté seguro de que la regla no tiene consecuencias inesperadas podrá cambiar la acción.
Ejemplos de expresiones regulares
Consulte las tablas siguientes para conocer algunos ejemplos habituales de las expresiones regulares. Para especificar una expresión regular, añada un operador “.REG.” antes del patrón.
Elemento |
Significado |
Ejemplo |
---|---|---|
. |
El carácter de punto representa cualquier carácter excepto el carácter de nueva línea. |
do. coincide con dolor, domingo, don, dos, doce, etc. d.r coincide con domador, decorador, etc. |
* |
El carácter de asterisco significa cero o más instancias del elemento anterior. |
do* coincide con d, do, doo, dooo, doooo, etc. |
+ |
El signo más significa una o más instancias del elemento anterior. |
do+ coincide con do, doo, dooo, doooo, etc. pero no con d. |
? |
El signo de interrogación significa cero o una instancia del elemento anterior. |
do?s coincide con ds o dos, pero no con doos, dooos, etc. |
( ) |
Los paréntesis hacen que el contenido que se encuentre entre ellos se considere como una única entidad. |
d(os)+ coincide con dos o doos o dooooos, etc. El signo + se aplica a la subcadena entre paréntesis, por lo que el regex busca por una d seguida de uno o más grupos de "os". |
[ ] |
Los corchetes indican un conjunto o rango de caracteres. |
d[aeiou]+ coincide con da, de, di, do, du, daa, dae, dai, etc. El signo + se aplica al conjunto situado entre los corchetes, por lo que regex busca una d seguida de uno o varios de los caracteres del conjunto [aeiou]. d[A-Z] coincide con dA, dB, dC, etc. hasta dZ. El conjunto situado entre los corchetes representa el rango de todas las letras mayúsculas de la A a la Z. |
[ ^ ] |
El carácter de acento circunflejo entre corchetes niega lógicamente el conjunto o rango especificado, por lo que el regex coincidirá con cualquier carácter que no esté incluido en el conjunto o rango. |
d[^aeiou] coincide con db, dc o dd, d9, d# (es decir, d seguido de cualquier carácter excepto una vocal). |
{ } |
Las llaves definen un número específico de ocurrencias del elemento anterior. Un solo valor dentro de las llaves significa que solo se dará una coincidencia cuando se produzca ese número de ocurrencias. Un par de números separados por una coma significa un conjunto de recuentos válidos del carácter anterior. Un solo dígito seguido de una coma significa que no hay límite superior. |
da{3} coincide con daaa (d seguida por 3 y solo 3 ocurrencias de “a”). da{2,4} coincide con daa, daaa, daaaa y daaaa (pero no con daaaaa) (d seguida por 2, 3 ó 4 ocurrencias de “a”). da{4,} coincide con daaaa, daaaaa, daaaaaa, etc. (d seguida por 4 o más ocurrencias de “a”). |
Elemento |
Significado |
Ejemplo |
---|---|---|
\d |
Cualquier carácter de dígito; funcionalmente equivalente a [0-9] o [[:digit:]] |
\d coincide con 1, 12, 123, etc., pero no con 1b7 (uno o varios caracteres de dígito). |
\D |
Cualquier carácter que no sea de dígito; funcionalmente equivalente a [^0-9] o [^[:digit:]] |
\D coincide con a, ab, ab&, pero no con 1--uno o varios caracteres cualquiera excepto 0, 1, 2, 3, 4, 5, 6, 7, 8 ó 9. |
\w |
Cualquier carácter de “"palabra”, es decir, cualquier carácter alfanumérico; funcionalmente equivalente a [_A-Za-z0-9] o [_[:alnum:]] |
\w coincide con a, ab, a1, pero no con !&--una o varias letras en mayúsculas o minúsculas o dígitos, pero no caracteres de puntuación o especiales. |
\W |
Cualquier carácter que no sea alfanumérico; funcionalmente equivalente a [^_A-Za-z0-9] o [^_[:alnum:]] |
\W coincide con *, &, pero no con as o a1--uno o varios caracteres cualquiera excepto letras es mayúsculas o minúsculas y dígitos. |
\s |
Cualquier carácter de espacio en blanco; espacio, nueva línea, tabulación, espacio de no separación, etc.; funcionalmente equivalente a [[:space]] |
verdura\s coincide con “verdura” seguido de cualquier carácter de espacio en blanco. Por este motivo, la frase "Me gusta la verdura en la sopa" activaría el regex, pero no "Me gustan las verduras en la sopa". |
\S |
Cualquier carácter que no sea espacio en blanco; carácter distinto a espacio, nueva línea, tabulación, espacio de no separación, etc.; funcionalmente equivalente a [^[:space]] |
verdura\S coincide con “verdura” seguido de cualquier carácter que no sea un espacio en blanco. Por este motivo, la frase "Me gusta la verdura en la sopa" activaría el regex, pero no "Me gustan las verduras en la sopa". |
Elemento |
Significado |
Ejemplo |
---|---|---|
[:alpha:] |
Cualquier carácter alfabético |
.REG. [[:alpha:]] coincide con abc, def, xxx, pero no con 123 o @#$. |
[:digit:] |
Cualquier carácter de dígito; funcionalmente equivalente a \d |
.REG. [[:digit:]] coincide con 1, 12, 123, etc. |
[:alnum:] |
Cualquier carácter de “palabra”, es decir, cualquier carácter alfanumérico; funcionalmente equivalente a \w |
.REG. [[:alnum:]] coincide con abc, 123, pero no con ~!@. |
[:space:] |
Cualquier carácter de espacio en blanco; espacio, nueva línea, tabulación, espacio de no separación, etc.; funcionalmente equivalente a \s |
.REG. (verdura)[[:space:]] coincide con “verdura” seguido de cualquier carácter de espacio en blanco. Por este motivo, la frase "Me gusta la verdura en la sopa" activaría el regex, pero no "Me gustan las verduras en la sopa". |
[:graph:] |
Cualquier carácter excepto caracteres de espacio y control y similares |
.REG. [[:graph:]] coincide con 123, abc, xxx, ><”, pero no con caracteres de espacio o control. |
[:print:] |
Cualquier carácter (similar a [:graph:]) pero incluye el carácter de espacio |
.REG. [[:print:]] coincide con 123, abc, xxx, ><” y caracteres de espacio. |
[:cntrl:] |
Cualquier carácter de control (por ej. CTRL + C, CTRL + X) |
.REG. [[:cntrl:]] coincide con 0x03, 0x08, pero no con abc, 123, !@#. |
[:blank:] |
Caracteres de espacio y tabulación |
.REG. [[:blank:]] coincide con caracteres de espacio y tabulación, pero no con 123, abc, !@# |
[:punct:] |
Caracteres de puntuación |
.REG. [[:punct:]] coincide con ; : ? ! ~ @ # $ % & * ‘ “ , etc., pero no con 123, abc |
[:lower:] |
Cualquier carácter alfabético en minúscula (Nota: la opción ‘Activar coincidencia con diferenciación de mayúsculas y minúsculas’ debe estar activada o, de lo contrario, funcionará como [:alnum:]) |
.REG. [[:lower:]] coincide con abc, Def, sTress, Do, etc., pero no con ABC, DEF, STRESS, DO, 123, !@#. |
[:upper:] |
Cualquier carácter alfabético en mayúscula (Nota: la opción ‘Activar coincidencia con diferenciación de mayúsculas y minúsculas’ debe estar activada o, de lo contrario, funcionará como [:alnum:]) |
.REG. [[:upper:]] coincide con ABC, DEF, STRESS, DO, etc., pero no con abc, Def, Stress, Do, 123, !@#. |
[:xdigit:] |
Dígitos permitidos en un número hexadecimal (0-9a-fA-F) |
.REG. [[:xdigit:]] coincide con 0a, 7E, 0f, etc. |
Elemento |
Significado |
Ejemplo |
---|---|---|
^ |
Indica el comienzo de una cadena. |
^(a pesar de que) coincide con cualquier bloque de texto que comenzara con “a pesar de que”, por lo que la frase “a pesar de que me gustan las verduras en la sopa” activaría el regex, pero no “me gustan las verduras en la sopa a pesar de que”. |
$ |
Indica el final de una cadena. |
(a pesar de que)$ coincide con cualquier bloque de texto que finalizara con “a pesar de que”, por lo que la frase “a pesar de que me gustan las verduras en la sopa” no activaría el regex, pero “me gustan las verduras en la sopa a pesar de que” sí lo haría. |
Elemento |
Significado |
Ejemplo |
---|---|---|
\ |
Para coincidir con algunos caracteres que tienen un significado especial en una expresión regular (por ejemplo, “+”). |
(1) .REG. C\\C\+\+ coincide con ‘C\C++’. (2) .REG. \* coincide con *. (3) .REG. \? coincide con ?. |
\t |
Indica un carácter de tabulación. |
(fuerza)\t coincide con cualquier bloque de texto que contenga la subcadena “fuerza” inmediatamente seguida de un carácter de tabulación (ASCII 0x09). |
\n |
Indica el carácter de nueva línea. Nota:
El carácter de nueva línea se representa de distinta manera según la plataforma. En Windows, una nueva línea es un par de caracteres, un retorno de carro seguido de un avance de línea. En Unix y Linux, una nueva línea es solo un avance de línea, mientras que en Macintosh una nueva línea es solo un retorno de carro. |
(fuerza)\n\n coincide con cualquier bloque de texto que contenga la subcadena fuerza inmediatamente seguida de los dos caracteres de nueva línea (ASCII 0x0A). |
\r |
Indica un carácter de retorno de carro. |
(fuerza)\r coincide con cualquier bloque de texto que contenga la subcadena “fuerza” inmediatamente seguida de un carácter de retorno de carro (ASCII 0x0D). |
\b |
Indica un carácter de retroceso. OR Determina los límites. |
(fuerza)\b coincide con cualquier bloque de texto que contenga la subcadena “fuerza” inmediatamente seguida de un carácter de retroceso (ASCII 0x08). Los límites de palabra (\b) se definen como un espacio entre dos caracteres, con \w en un lado y \W en el otro (independientemente del orden), contando los caracteres imaginarios desde el principio y el final de la cadena como coincidentes con una \W. (Dentro de las clases de caracteres una \b representa un retroceso en lugar de un límite de palabra.) Por ejemplo, la siguiente expresión regular puede coincidir con el número de la seguridad social: .REG. \b\d{3}-\d{2}-\d{4}\b |
\xhh |
Indica un carácter ASCII con un código hexadecimal determinado (donde hh representa cualquier valor hexadecimal de dos dígitos). |
\x7E(\w){6} coincide con cualquier bloque de texto que contenga una palabra de exactamente seis caracteres alfanuméricos precedidos por un carácter ~ (tilde). Por lo tanto, las palabras "~ab12cd", "~Pa3499" coincidirían, pero no "~oops". |
Generador de expresiones regulares
Al decidir cómo configurar las reglas para la prevención de pérdida de datos, tenga en cuenta que el generador de expresiones regulares sólo puede crear expresiones sencillas en función de las siguientes reglas y limitaciones:
Las variables sólo pueden ser caracteres alfanuméricos.
Todos los demás caracteres como, por ejemplo, [-], [/], entre otros, solo pueden ser constantes.
Los rangos de variables sólo pueden ser de A-Z y 0-9; no se pueden limitar los rangos a, por ejemplo, A-D.
Las expresiones regulares generadas por esta herramienta distinguen entre mayúsculas y minúsculas.
Las expresiones regulares generadas por esta herramienta solo pueden realizar coincidencias positivas, no negativas ("si no coincide").
Las expresiones basadas en el ejemplo solo pueden obtener coincidencias con el número exacto de caracteres y espacios del ejemplo; la herramienta no puede generar patrones que coincidan con "una o varias" instancias de un determinado carácter o cadena.
Sintaxis en expresiones complejas
Una expresión de palabra clave está formada por testigos, que es la unidad más pequeña usada para hacer coincidir la expresión con el contenido. Un testigo puede ser un operador, un símbolo lógico o el operando, es decir, el argumento o el valor sobre el que actúa el operador.
Los operadores son: .AND., .OR., .NOT., .NEAR., .OCCUR., .WILD., “.(.” and “ .).” El operando y el operador deben estar separados por un espacio. Un operando también puede contener varios testigos. Consulte Palabras clave.
Expresiones regulares en el trabajo
En el siguiente ejemplo se describe cómo funciona el filtro de contenido Seguridad Social, uno de los filtros predeterminados:
[Format] .REG. \b\d{3}-\d{2}-\d{4}\b
La expresión anterior utiliza \b, un carácter de retroceso, seguido de \d, cualquier dígito y, a continuación, {x}, que indica el número de dígitos y, por último, -, que indica un guion. Esta expresión coincide con el número de seguridad social. En la tabla siguiente se describen las cadenas que coinciden con la expresión regular del ejemplo:
.REG. \b\d{3}-\d{2}-\d{4}\b |
|
333-22-4444 |
Coincidencia |
333224444 |
No coincide |
333 22 4444 |
No coincide |
3333-22-4444 |
No coincide |
333-22-44444 |
No coincide |
Si la expresión se modifica de la siguiente forma,
[Format] .REG. \b\d{3}\x20\d{2}\x20\d{4}\b
la nueva expresión coincidirá con la siguiente secuencia:
333 22 4444