Compartilhar via


Expressões Regulares em Regras de Transporte

Aplica-se a: Exchange Server 2010

Tópico modificado em: 2009-11-05

Você pode usar expressões regulares nos predicados de regra de transporte do Exchange Server 2010 para corresponder a padrões de texto em diferentes partes de uma mensagem (como nos cabeçalhos, remetentes, destinatários, assuntos e também no corpo das mensagens). Predicados são usados por condições e exceções para determinar se uma ação configurada deve ser aplicada a uma mensagem de email.

Procurando tarefas de gerenciamento relacionadas a regras de transporte? Consulte Gerenciando Regras de Transporte.

Sumário

Expressões Simples x Expressões Regulares

Expressões Regulares no Exchange 2010

Criando uma Regra de Transporte que Use uma Expressão Regular

Expressões Simples x Expressões Regulares

Para entender as expressões regulares, é preciso começar entendendo expressões simples. Uma expressão simples é um valor específico que você deseja corresponder exatamente em uma mensagem. Predicados usando expressões simples correspondem a palavras ou cadeias de caracteres específicas. Um exemplo de expressão simples é o título de um documento que sua organização não quer que seja distribuído fora da organização, como Previsão de Vendas Anuais.doc. Um dado em uma mensagem de email deve corresponder exatamente a uma expressão simples para satisfazer uma condição ou exceção em regras de transporte.

Uma expressão regular é uma notação concisa e flexível para localização de padrões de texto em uma mensagem. A notação consiste em dois tipos básicos de caracteres:

  • Caracteres literais Texto que deve existir na cadeia de caracteres de destino. Esses são caracteres normais, que valem conforme digitados.
  • Metacaracteres Um ou mais caracteres especiais que não são interpretados literalmente. Eles indicam como o texto pode variar na cadeia de caracteres de destino.

Você pode usar expressões regulares para analisar rapidamente mensagens de email para localizar padrões de texto específicos. Isso permite a você detectar mensagens com tipos específicos de conteúdo, como CPFs, números de patentes e números de telefone.

Não é possível fazer correspondência para esses dados com uma expressão simples, pois uma expressão simples exige que você insira todas as variações possíveis do valor que deseja detectar. Em muitos casos, o uso de expressões simples para essas aplicações se torna um desafio logístico, e corresponder um grande número de expressões simples no conteúdo de mensagens pode exigir muitos recursos. O uso de expressões regulares costuma ser mais eficiente. Em vez de especificar todas as variações possíveis, você pode configurar o predicado da regra de transporte para pesquisar um padrão de texto.

Expressões Regulares no Exchange 2010

No Shell de Gerenciamento do Exchange, você pode usar expressões regulares em qualquer predicado que aceite a propriedade de predicado Patterns. No Console de Gerenciamento do Exchange, você pode usar epressões regulares com qualquer condição ou exceção que contenha as palavras com padrões de texto. Para obter mais informações sobre predicados, consulte Predicados de regra de transporte.

Aviso

Você deve testar regularmente as expressões regulares que construir para verificar se elas produzem os resultados esperados. Uma expressão regular configurada incorretamente pode produzir correspondências inesperadas e causar comportamento indesejado das regras de transporte. Isso pode resultar na tomada de ações indesejáveis em mensagens e no conteúdo delas, com possibilidade de perda de dados quando ações como rejeição ou devolução de mensagens forem usadas. Teste suas expressões regulares em um ambiente de teste antes de implementá-las na produção.

A tabela a seguir lista as cadeias de caracteres de padrão que você pode usar para criar uma expressão regular de correspondência de padrões no Exchange 2010.

Cadeias de caracteres de padrão

Cadeia de caracteres padrão Descrição

\S

A cadeia de caracteres de padrão \S corresponde a qualquer caractere único que não seja um espaço.

\s

A cadeia de caracteres padrão \s corresponde a qualquer espaço em branco único.

\D

A cadeia de caracteres padrão \D corresponde a qualquer dígito não-numérico.

\d

A cadeia de caracteres padrão \d corresponde a qualquer dígito numérico único.

\w

A cadeia de caracteres do padrão \w corresponde a qualquer caractere Unicode único categorizado como uma letra ou dígito decimal.

\W

A cadeia de caracteres de padrão \W corresponde a qualquer caractere Unicode não categorizado como uma letra ou dígito decimal.

|

O caractere de barra vertical ( | ) executa uma função OR.

*

O caractere de asterisco ( * ) corresponde a zero ou mais instâncias do caractere anterior. Por exemplo, ab*c corresponde às seguintes cadeias de caracteres: ac, abc, abbbbc.

( )

Parênteses agem como delimitadores de agrupamento. Por exemplo, a(bc)* corresponde às seguintes cadeias de caracteres: a, abc, abcbc, abcbcbc, e assim por diante.

\

Uma barra invertida é usada como um caractere de escape antes de um caractere especial. Caracteres especiais são caracteres usados em cadeias de caracteres de padrão:

  • Barra invertida ( \ )
  • Barra vertical ( | )
  • Asterisco ( * )
  • Parêntese de abertura ( ( )
  • Parêntese de fechamento ( ) )
  • Circunflexo ( ^ )
  • Cifrão ( $ )

Por exemplo, se você deseja fazer a correspondência de uma cadeia de caracteres que contém (525), você deve digitar \(525\).

^

O circunflexo ( ^ ) indica que a cadeia de caracteres de padrão após o circunflexo deve existir no início do texto que está sendo correspondido.

Por exemplo, ^fred@contoso corresponde a fred@contoso.com e fred@contoso.co.uk mas não a alfred@contoso.com.

Esse caractere também pode ser usado com o cifrão ( $ ) para especificar uma cadeia de caracteres exata para correspondência. Por exemplo, ^kim@contoso.com$ corresponde somente a kim@contoso.com e não corresponde a nada mais, como kim@contoso.com.au.

$

O cifrão ( $ ) indica que a cadeia de caracteres de padrão precedente deve existir no final do texto que está sendo correspondido.

Por exemplo, contoso.com$ corresponde a adam@contoso.com e kim@research.contoso.com, mas não a kim@contoso.com.au.

Esse caractere também pode ser usado com o circunflexo (^) para especificar uma cadeias de caracteres exata para correspondência. Por exemplo, ^kim@contoso.com$ corresponde somente a kim@contoso.com e não corresponde a nada mais, como chris@sales.contoso.com.

Construindo Expressões Regulares

Usando a tabela anterior, você pode construir uma expressão regular que corresponda ao padrão dos dados que você deseja corresponder. Trabalhando da esquerda para a direita, examine cada caractere ou grupo de caracteres nos dados que você deseja corresponder. Leia a descrição de cada cadeia de caracteres de padrão para determinar como ela se aplica aos dados que você está correspondendo. Em seguida, determine qual cadeia de caracteres de padrão na tabela representa esse caractere ou grupo de caracteres e adicione esse cadeia de caracteres padrão à expressão regular. Quando tiver concluído, você terá uma expressão regular inteiramente construída.

Este exemplo de expressão regular corresponde a números de telefone norte-americanos nos formatos 425 555-0100 e 425.555.0100.

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

Você pode expandir esse exemplo adicionando o formato de telefone (425) 555-0100, que usa parênteses para o código de área. Este exemplo de uma expressão regular corresponde a todos os três formatos de número de telefone.

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

Você pode analisar o exemplo anterior da seguinte maneira:

  • \d\d\d   Esta parte exige que exatamente três dígitos numéricos apareçam primeiro.
  • ((\s|.|-|\)|\)\s) Esta parte exige que um espaço, um ponto ou um hífen exista após o número de três dígitos. Cada cadeia de caracteres de correspondência de caracteres está contida nos delimitadores de agrupamento e separada pela barra vertical. Isso significa que apenas um dos caracteres especificados dentro dos delimitadores de agrupamento pode existir neste local na cadeia de caracteres que está sendo correspondida. Para a separação entre o código de área e os próximos três dígitos, ela também procura por um parêntese de fechamento, ou por um parêntese de fechamento e um espaço.
  • \d\d\d   Esta parte exige que exatamente três dígitos numéricos apareçam em seqüência.
  • (\s|.|-) Esta parte exige que um espaço, um ponto ou um hífen exista após o número de três dígitos.
  • \d\d\d\d   Esta parte exige que exatamente quatro dígitos numéricos apareçam em seqüência.

A expressão regular acima irá corresponder aos valores do exemplo a seguir:

  • (425)555.0100
  • 425 555 0100
  • 425. 555-0100
  • (425) 555-0100
  • 425-555-0100
  • (425) 555-0100

Criando uma Regra de Transporte que Use uma Expressão Regular

Este exemplo cria uma regra de transporte no Shell que usa expressões regulares para corresponder CPFs no assunto de uma mensagem de email.

New-TransportRule -Name "Social Security Number Block Rule" -SubjectOrBodyMatchesPatterns '\d\d\d-\d\d-\d\d\d\d' -RejectMessageEnhancedStatusCode "5.7.1" -RejectMessageReasonText "This message has been rejected because of content restrictions" 

Este exemplo permite que você exiba a nova regra de transporte.

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