Expresiones regulares en reglas de transporte

 

Se aplica a: Exchange Server 2007 SP3, Exchange Server 2007 SP2, Exchange Server 2007 SP1, Exchange Server 2007

Última modificación del tema: 2009-04-09

En este tema se describe la implementación de las expresiones regulares que se pueden usar con los predicados en las reglas de transporte. Las condiciones y las excepciones usan los predicados para determinar si se debe aplicar una determinada acción, o varias, a un mensaje de correo electrónico.

Para obtener más información acerca de las reglas de transporte, consulte Introducción a las reglas de transporte.

¿Qué son las expresiones regulares?

Para entender qué es una expresión regular es necesario entender en primer lugar qué es una expresión simple. Una expresión simple representa una valor específico que cumple una condición o una excepción. Por ejemplo, el título de un documento que no debe salir de la organización. Por tanto, para cumplir una condición o una excepción de las reglas de transporte, un dato de un mensaje de correo electrónico tendría que coincidir exactamente con una expresión simple.

Una expresión regular es una notación concisa y flexible que identifica patrones de texto en un mensaje. La notación está compuesta por dos tipos de caracteres básicos: caracteres de texto literales (normales), que indican el texto que debe aparecer en una cadena dada, y los metacaracteres, que indican o controlan las posibles variaciones que el texto puede tener en dicha cadena. De este modo, las expresiones regulares se pueden usar para analizar rápidamente mensajes de correo electrónico y encontrar patrones de caracteres específicos.

La posibilidad de encontrar patrones de texto en un mensaje de correo electrónico permite que los predicados identifiquen datos que pueden cambiar dinámicamente. Por ejemplo, números de la seguridad social o de patentes. Para que una expresión simple pudiera identificar un dato dinámico, tendría que contener todas las variaciones del dato que se busca, lo cual no sería un modo razonable de trabajar. En cambio, mediante expresiones regulares se puede configurar el predicado para que busque el patrón que se repite en todos los números de la seguridad social o de las patentes.

Las expresiones regulares se pueden usar en todos los predicados de regla de condición o excepción, excepto en "is a delivery report". Para obtener más información acerca de los predicados que aceptan la identificación de patrones de expresiones regulares, consulte Predicados de la regla de transporte.

Implementación de expresiones regulares

En Shell de administración de Exchange se pueden usar expresiones regulares en los predicados que acepten la propiedad de predicado Patterns. En la Consola de administración de Exchange, puede usar expresiones regulares con cualquier condición o excepción que contenga las palabras with text patterns. La Tabla 1 incluye todas las cadenas de patrones que se pueden usar para crear expresiones regulares de identificación de patrones.

Advertencia

Debe comprobar detenidamente las expresiones regulares que cree para asegurarse de que, efectivamente, los resultados que devuelven son los esperados. Una configuración incorrecta, con sus consiguientes resultados inesperados, podría dar lugar a un comportamiento no deseado de la regla de transporte. De aquí que sea recomendable comprobar las expresiones regulares en un entorno de prueba antes de ponerlas en producción.

Tabla 1   Cadenas de patrones

Cadena de patrón Descripción

\S

La cadena de patrón \S identifica cualquier carácter que no es un espacio.

\s

La cadena de patrón \s identifica cualquier carácter de espacio en blanco.

\D

La cadena de patrón \D identifica cualquier dígito que no es numérico.

\d

La cadena de patrón \D identifica cualquier dígito numérico.

\w

La cadena de patrón \w identifica cualquier carácter Unicode categorizado como una letra o dígito decimal.

|

El carácter de barra vertical ( | ) realiza una función OR.

*

El carácter de asterisco ( * ) identifica la ausencia o presencia de instancias del carácter anterior. Por ejemplo, ab*c identificaría las siguientes cadenas: ac, abc, abbbbc.

( )

Los paréntesis hacen la función de delimitadores de agrupamiento. Por ejemplo, a(bc)* identificaría las siguientes cadenas: a, abc, abcbc, abcbcbc, y así sucesivamente.

\

La barra diagonal inversa ( \ ) es el carácter de escape que se utiliza junto con un carácter especial. A continuación, se muestran los caracteres especiales que se utilizan en las cadenas de patrones:

  • Barra diagonal inversa: \

  • Barra vertical partida: |

  • Asterisco: *

  • Paréntesis de apertura: (

  • Paréntesis de cierre: )

  • Carácter de intercalación: ^

  • Dólar: $

Por ejemplo, si desea identificar una cadena que contenga (525), deberá escribir \(525\).

\\

Se utilizan dos barras diagonales inversas para que el carácter de barra diagonal inversa se reconozca como tal y no como un carácter de escape. Por ejemplo, si desea identificar una cadena que contenga \d, escribiría \\d.

^

El carácter de intercalación ( ^ ) indica que la cadena de patrón que sigue al carácter de intercalación debe aparecer al principio de la cadena de texto que se intenta identificar. Por ejemplo, ^fred@contoso identificaría fred@contoso.com y fred@contoso.co.uk, pero no alfred@contoso.com.

También se puede usar este carácter en conjunción con el carácter de dólar ( $ ) para especificar la búsqueda de una cadena exacta. Por ejemplo, ^kim@contoso.com$ sólo identifica kim@contoso.com , y no instancias como kim@contoso.com.au.

$

El carácter de dólar ( $ ) indica que la cadena de patrón que le precede debe existir al final de la cadena de texto que se busca. Por ejemplo, contoso.com$ identificaría adam@contoso.com y kim@research.contoso.com, pero no kim@contoso.com.au.

Este carácter también se puede usar en conjunción con el carácter de intercalación ( ^ ) para especificar la búsqueda de una cadena exacta. Por ejemplo, ^kim@contoso.com$ sólo identificaría kim@contoso.com , y no instancias como chris@sales.contoso.com.

Con la ayuda de la Tabla 1, puede crear una expresión regular que identifique un determinado patrón de datos. De izquierda a derecha, examine cada carácter o grupo de caracteres presentes en los datos que desea identificar. Lea la descripción de cada cadena de patrón para determinar cómo se aplica a los datos que desea identificar. A continuación, determine qué cadena de patrón de la Tabla 1 representa ése carácter o grupo de caracteres, y agregue dicha cadena de patrón a la expresión regular. Cuando termine, habrá creado una expresión regular.

Por ejemplo, la siguiente expresión regular identifica los números de teléfono de Estados Unidos que tengan el formato 425 555-0100 ó 425.555.0100:

425(\s|.)\d\d\d(-|.)\d\d\d\d

Podría agregar el formato (425) 555-0100, que usa paréntesis para identificar el prefijo. La siguiente expresión regular identificará los tres formatos de número de teléfono:

(\\()*\d\d\d(\\)|\s|.)\d\d\d(-|.)\d\d\d\d

Puede analizar el ejemplo anterior del siguiente modo:

  • (\\()*   Esta parte hace que el primer paréntesis sea opcional. Como el paréntesis de cierre es también un delimitador de expresión regular, debe omitirse; para ello, se usan dos barras inversas \\. Los paréntesis (()) agrupan los caracteres de \\( para que el carácter de asterisco * pueda actuar en los caracteres de \\( y hacerlos opcionales.

  • \d\d\d   Esta parte condiciona que lo siguiente que aparezca sean tres dígitos numéricos.

  • (\\)|\s|.)   Esta parte exige que tras el número de tres dígitos aparezca un paréntesis de apertura, un espacio o un punto. Cada cadena de identificación de caracteres está contenida en los delimitadores de agrupamiento y está separada por el carácter de barra vertical. Esto significa que sólo uno de los caracteres especificados en los delimitadores de agrupamiento puede aparecer en esta ubicación de la cadena que se busca.

  • \d\d\d   Esta parte condiciona que lo siguiente que aparezca sean tres dígitos numéricos.

  • (-|.)   Esta parte condiciona que aparezca un guión o un punto el carácter tras el número de tres dígitos. Dado que los delimitadores de agrupamiento contienen el guión y el punto, sólo uno de los dos caracteres pueden existir en esta ubicación de la cadena que se busca.

  • \d\d\d\d   Esta parte condiciona que sean cuatro dígitos numéricos los siguientes caracteres que aparezcan.

Ejemplo de una regla de transporte que usa una expresión regular

En el siguiente ejemplo se muestra cómo puede usar expresiones regulares en la creación de una regla nueva en Shell de administración de Exchange:

Crear una regla de transporte que use expresiones regulares que identifiquen números de la seguridad social en el asunto de un mensaje de correo electrónico

  1. Ejecute los siguientes comandos:

    $Condition = Get-TransportRulePredicate SubjectMatches
    $Condition.Patterns = @("\d\d\d-\d\d-\d\d\d\d")
    $Action = Get-TransportRuleAction RejectMessage
    $Action.RejectReason = "The transmission of Social Security Numbers is prohibited."
    New-TransportRule -Name "Social Security Number Block Rule" -Conditions $Condition -Actions $Action 
    
  2. Ejecute el siguiente comando para ver la nueva regla de transporte:

    Get-TransportRule "Social Security Number Block Rule" | Format-List
    

Al ejecutar el comando Get-TransportRule, aparecerá la siguiente información:

Identity           : Social Security Number Block Rule,753ed939-1227-4b2a-a8e0-ec49b0615f30
Name               : Social Security Number Block Rule
RuleCollectionName : Transport
Priority           : 0
Comments           :
ManuallyModified   : False
Conditions         : {SubjectMatches}
Exceptions         :
Actions            : {RejectMessage}
State              : Enabled
IsValid            : True
ObjectState        : Unchanged

Para obtener más información

Para obtener información detallada acerca de la sintaxis y los parámetros de los comandos, consulte los siguientes temas:

Para obtener más información acerca de las reglas de transporte, consulte los siguientes temas: