Expressões regulares em filtros e substituições

Uma expressão regular descreve o texto que você quer encontrar. Em vez de uma frase exata, você define um padrão: por exemplo, a palavra “Pedido” e qualquer número depois dela. O número pode mudar em cada mensagem, e o padrão ainda encontrará o trecho desejado.

Assim, você pode buscar datas, links, palavras, linhas inteiras e praticamente qualquer combinação de texto que possa ser descrita por uma regra. Alguns símbolos simples permitem considerar valores variáveis, escolher entre diferentes opções e ignorar o que não é necessário. As possibilidades dessa busca vão muito além da busca comum por uma palavra.

Busca de trechos de texto que correspondem a um padrão

O que as expressões regulares permitem fazer

O suporte a expressões regulares nos filtros e nas substituições do FLOWIN permite:

  • Adicionar qualquer texto ao início ou ao final das mensagens.
  • Filtrar mensagens com links.
  • Remover links, telefones, e-mails e outras informações de contato das mensagens copiadas.
  • Filtrar mensagens longas ou, ao contrário, apenas as curtas.

Modo “Regexp”

Nas configurações de um filtro ou de uma substituição, o modo “Regexp”, ao lado do campo “Buscar”, ativa a busca por expressão regular. O próprio padrão é definido nesse campo. A criação da regra e sua aplicação a um encaminhamento são descritas nas instruções sobre filtros e substituições.

Modo Regexp ao lado do campo Buscar nas configurações de substituição
“Regexp” nas configurações de substituição.

Como ler uma expressão regular

Vamos começar pelo padrão Pedido №\d+. Ele encontra tanto Pedido №125 quanto Pedido №8072, embora os números sejam diferentes. Vamos lê-lo da esquerda para a direita:

  • Pedido № busca exatamente essas letras, o espaço e o símbolo de número.
  • \d representa qualquer dígito de 0 a 9.
  • + exige um ou mais desses dígitos em sequência.

O trecho encontrado é chamado de correspondência. Na mensagem Pedido №125 aceito a correspondência será Pedido №125, e a palavra aceito ficará fora dela. Em um filtro, a correspondência ajuda a determinar se a mensagem atende à condição; em uma substituição, indica qual trecho alterar.

Letras e espaços comuns no padrão são buscados como estão escritos. Os símbolos especiais definem regras. A seguir, explicamos as principais notações e, depois, reunimos exemplos prontos para diferentes tarefas.

Sintaxe das expressões regulares

Para começar a usar expressões regulares, você precisa conhecer a sintaxe, ou seja, entender o que determinados símbolos representam.

Símbolos básicos

  • ^ indica o início do texto.
  • $ indica o final do texto.
  • . corresponde a qualquer caractere, incluindo uma quebra de linha.
  • \d corresponde a um dígito de 0 a 9.
  • \w corresponde a uma letra latina, um dígito ou um sublinhado.
  • \n representa uma quebra de linha.
  • \t representa uma tabulação.
  • \s corresponde a um espaço comum, uma tabulação, uma quebra de linha, um retorno de carro ou uma quebra de página.
  • \b verifica um limite de palavra, por exemplo, entre uma letra e um espaço. Não adiciona nenhum caractere à correspondência.

Quantificadores

Os quantificadores indicam quantas vezes o caractere ou o grupo anterior se repete. Um grupo reúne vários caracteres entre parênteses.

  • * significa 0 ou mais vezes.
  • + significa 1 ou mais vezes.
  • ? significa 0 ou 1 vez.
  • {5} significa exatamente 5 vezes.
  • {1,5} significa de 1 a 5 vezes.
  • {1,} significa 1 ou mais vezes.
  • {0,5} significa de 0 a 5 vezes.

Por exemplo:

  • a+ corresponde a a, aa, aaa e assim por diante.
  • .* corresponde a qualquer texto, mesmo vazio.
  • ab{3} corresponde a abbb.

Grupos

Os parênteses ( ) reúnem caracteres em um grupo. Os grupos são usados principalmente com quantificadores ou com a barra vertical |, que representa o OU lógico.

Por exemplo:

  • ((Bob)|(Alice)) corresponde tanto a Bob quanto a Alice.
  • (abc){3} corresponde a abcabcabc.

Conjunto de caracteres

Para indicar um conjunto de caracteres, usam-se colchetes [ ]. Dentro deles, os caracteres podem ser listados assim:

  • [а-яё] corresponde a qualquer letra do alfabeto russo.
  • [абвгд] ou [а-д] corresponde a uma das letras а, б, в, г ou д.
  • [a-z] corresponde a qualquer letra latina de a a z.
  • [0-5] corresponde a qualquer dígito de 0 a 5.

O símbolo ^ no início do conjunto representa o NÃO lógico:

  • [^а-яё] corresponde a qualquer caractere, exceto uma letra do alfabeto russo.
  • [^a-z] corresponde a qualquer caractere, exceto uma letra latina de a a z.
  • [^\s] corresponde a qualquer caractere que não faça parte de \s.

No FLOWIN, \w não inclui caracteres cirílicos. [а-яё] abrange o alfabeto russo, incluindo ё. O intervalo [а-я] não inclui essa letra.

Escape de caracteres

Se um caractere especial for necessário como texto comum, e não como parte da sintaxe, coloque uma barra invertida antes dele: \. Isso é chamado de escape.

Por exemplo:

  • :\) corresponde a :). Aqui, o parêntese representa um parêntese comum, e não um grupo.
  • quem\? corresponde a quem?. Aqui, o ponto de interrogação não define a quantidade de repetições.

Configurações de busca no FLOWIN

As flags alteram as regras gerais da busca: por exemplo, se letras maiúsculas e minúsculas devem ser diferenciadas. No FLOWIN, algumas configurações já estão ativadas, por isso o mesmo padrão pode se comportar de forma diferente em um testador externo com as configurações padrão.

As flags já estão configuradas

Nos filtros e nas substituições, estão ativados IgnoreCase (i), Singleline (s), RE2 e Unicode. Não é necessário adicioná-los manualmente a cada padrão. Veja o que importa na prática:

  • i desativa a distinção entre maiúsculas e minúsculas: gato encontrará tanto Gato quanto GATO.
  • s permite que o ponto . encontre uma quebra de linha. Por isso, .* pode abranger várias linhas de uma vez.
  • O modo de várias linhas Multiline (m) fica desativado por padrão: ^ e $ se referem ao início e ao final da mensagem inteira, e não de cada linha.
  • RE2 define as particularidades da sintaxe: \d busca os dígitos de 0 a 9, e \w apenas letras latinas, dígitos e sublinhados. Ativar Unicode não adiciona caracteres cirílicos a \w.

Não é necessário mudar nenhuma opção para os exemplos prontos abaixo. Se você os testar em outro serviço, considere essas configurações: flags com os mesmos nomes não garantem o mesmo comportamento em diferentes mecanismos.

Padrões prontos

Escolha a tarefa e copie o padrão para o campo “Buscar” no modo “Regexp”. Os exemplos mostram exatamente o texto encontrado. O que acontecerá depois com a mensagem depende do filtro ou da substituição configurada.

Número de pedido que muda a cada vez

Encontrar um pedido sem saber seu número de antemão.

Padrão:
Pedido №\d+

Texto: Pedido №125 aceito. Pedido №8072 aguarda resposta.

Encontrará: Pedido №125, Pedido №8072.

O texto “Pedido №” permanece constante, enquanto \d+ encontra um ou mais dígitos em sequência. O espaço antes de № também faz parte do padrão. “Pedido №ABC” não corresponderá.

Mensagem composta apenas por seis dígitos

Selecionar mensagens que contenham exatamente um código de seis dígitos.

Padrão:
^\d{6}$

Texto: 482901

Encontrará: 482901.

O início e o final delimitam a mensagem inteira, e {6} define seis dígitos. “Código: 482901”, “48290” e “482901 ”, com um espaço no final, não corresponderão.

Uma entre várias opções de texto

Encontrar mensagens que mencionem um de dois status.

Padrão:
pronto|cancelado

Texto: Pronto: arquivo enviado. Outro trabalho foi cancelado.

Encontrará: Pronto, cancelado.

A barra vertical significa “ou”. Não há distinção entre maiúsculas e minúsculas. Sem limites de palavra, o padrão também encontrará “pronto” dentro de “aprontou”.

Palavra inteira, sem correspondências dentro de outras palavras

Encontrar a palavra “gato”, ignorando “gatos” e “regato”.

Padrão:
\bgato\b

Texto: Gato, gatos e regato.

Encontrará: Gato.

\b em ambos os lados verifica os limites da palavra. Espaços e pontuação podem separar a palavra do texto vizinho; eles mesmos não fazem parte da correspondência.

Data no formato dia.mês.ano

Encontrar uma data com dia e mês escritos com dois dígitos e ano com quatro.

Padrão:
\d{2}\.\d{2}\.\d{4}

Texto: Reunião em 16.10.2026 às 12:00.

Encontrará: 16.10.2026.

\. representa um ponto comum, e não qualquer caractere. O padrão verifica o formato, mas não o calendário: “99.99.2026” também corresponderá.

Hashtags em russo e inglês

Encontrar hashtags compostas por letras, dígitos e sublinhados.

Padrão:
#[а-яёa-z0-9_]+

Texto: #Новости #release_2 #всё_готово

Encontrará: #Новости, #release_2, #всё_готово.

Após #, há um ou mais caracteres do conjunto. Um espaço ou hífen encerra a correspondência: em “#план-дня”, será encontrado apenas “#план”.

Menções no formato @username

Encontrar um texto semelhante a uma menção a um usuário ou canal.

Padrão:
@[a-z0-9_]{3,}

Texto: Autor: @news_room. Outro: @ab.

Encontrará: @news_room.

Após @, são necessárias pelo menos três letras latinas, dígitos ou sublinhados. O padrão busca o formato, sem verificar se o usuário existe. Ele também pode encontrar parte de um endereço de e-mail.

Encontrar um endereço da web escrito explicitamente com o protocolo.

Padrão:
https?:\/\/[^\s]+

Texto: Abra https://example.org/page e http://example.org

Encontrará: https://example.org/page, http://example.org.

A letra s é opcional. Após //, o padrão captura os caracteres até o próximo espaço ou outro separador de \s. Um endereço sem protocolo não corresponderá, enquanto uma vírgula ou um ponto junto ao endereço podem fazer parte da correspondência.

Telefone escrito com +7 e dez dígitos

Encontrar um número escrito sem parênteses, espaços ou hífens.

Padrão:
\+7\d{10}

Texto: Contato: +79991234567

Encontrará: +79991234567.

\+ busca um sinal de mais comum, e \d{10} define exatamente dez dígitos após o 7. O formato “+7 (999) 123-45-67” não corresponderá. Essa é uma busca pelo formato, sem verificar se o número existe; também pode haver correspondência dentro de uma sequência mais longa de dígitos.

Mensagens que começam com a marcação desejada

Encontrar a marcação “Importante:” apenas no início da mensagem.

Padrão:
^Importante:

Texto: IMPORTANTE: a reunião foi adiada.

Encontrará: IMPORTANTE:.

^ verifica o início do texto inteiro. Em “Atualização: Importante: a reunião foi adiada”, não haverá correspondência. Uma marcação no início da segunda linha também não corresponderá, pois o modo de várias linhas fica desativado por padrão.

Espaços extras entre palavras

Encontrar dois ou mais espaços comuns consecutivos para depois substituí-los por um só.

Padrão:
[ ]{2,}

No texto Texto··com···espaços serão encontrados dois grupos: dois e três espaços. O sinal · aqui apenas representa um espaço comum; não é necessário digitá-lo.

Dentro dos colchetes há um espaço comum, e {2,} exige pelo menos dois consecutivos. Para remover os espaços extras, os trechos encontrados são substituídos por um único espaço. Esse padrão não afeta as quebras de linha.

Mensagens curtas de até cem caracteres

Selecionar mensagens não vazias com comprimento de 1 a 100 caracteres.

Padrão:
^.{1,100}$

Texto: Mensagem curta

Encontrará: Mensagem curta.

O ponto conta qualquer caractere, incluindo espaços e quebras de linha. As chaves definem os limites, e ^ e $ exigem a verificação da mensagem inteira. Uma mensagem vazia e um texto com mais de 100 caracteres não corresponderão. Um emoji composto pode ser contado como vários caracteres.

A lista será ampliada. Sugestões de novos padrões podem ser enviadas ao suporte @value_maker.

Teste do seu próprio padrão

No regex101.com você pode testar suas próprias expressões regulares com facilidade. As configurações de busca lá podem ser diferentes das do FLOWIN. Por isso, antes de aplicar a expressão a um encaminhamento em uso, é necessário testá-la em mensagens com e sem a correspondência esperada.

Perguntas frequentes

Quando “Texto” ou “Lista” são suficientes e quando é necessário usar “Regexp”?

O modo “Texto” serve para uma frase conhecida, e “Lista” permite listar várias opções. “Regexp” é necessário quando o texto muda segundo uma regra: por exemplo, quando há um novo número após a palavra “Pedido” a cada vez. Ele também ajuda a definir limites de palavra ou uma quantidade de caracteres. A ação sobre a mensagem encontrada é configurada separadamente no filtro ou na substituição.

Por que uma expressão de um testador online funciona de forma diferente no FLOWIN?

O resultado depende do mecanismo e das configurações de busca. Nos filtros e nas substituições do FLOWIN, IgnoreCase, Singleline, RE2 e Unicode já estão ativados, enquanto Multiline fica desativado por padrão. Por isso, não há distinção entre maiúsculas e minúsculas, o ponto pode encontrar uma quebra de linha, e ^ e $ se referem à mensagem inteira. Confira as configurações de busca e teste a expressão no FLOWIN em mensagens com e sem a correspondência esperada.

Por que .* abrange várias linhas?

No FLOWIN, Singleline está ativado: o ponto também corresponde a uma quebra de linha. Por isso, .* não precisa parar no final da primeira linha. Se você precisa encontrar o texto até a próxima quebra de linha, pode usar [^\r\n]+: esse padrão busca um ou mais caracteres, exceto retorno de carro e quebra de linha.

Por que \w não encontra letras russas?

Nas configurações de busca do FLOWIN, \w abrange letras latinas, dígitos e sublinhados. Para letras russas, use [а-яё], e, para uma sequência dessas letras, [а-яё]+. A letra ё precisa ser indicada separadamente: o intervalo а-я não a inclui. Não é necessário diferenciar maiúsculas e minúsculas, pois a busca já ignora essa distinção.

Como encontrar uma palavra inteira, e não dentro de outra?

Adicione \b em ambos os lados da palavra. Por exemplo, \bgato\b encontrará “Gato” no texto “Gato, gatos e regato”, mas ignorará as outras duas palavras. Os limites verificam a posição da palavra; os espaços e a pontuação não fazem parte do trecho encontrado.

O padrão de data do exemplo verifica se essa data existe?

Não. A expressão \d{2}\.\d{2}\.\d{4} verifica apenas o formato: dois dígitos, ponto, dois dígitos, ponto e quatro dígitos. Por isso, encontrará tanto 16.10.2026 quanto 99.99.2026. Esse exemplo serve para buscar trechos semelhantes a datas, mas não confirma se o dia e o mês são válidos.

O que verificar se a expressão regular não encontra nada?

Primeiro, confira se “Regexp” está selecionado ao lado do campo “Buscar”. Depois, compare o padrão com o texto original: espaços, quebras de linha e sinais comuns também influenciam a correspondência. Por exemplo, Pedido №\d+ exige um espaço antes de № e dígitos depois dele, por isso não encontrará Pedido№125 nem Pedido №ABC. Verifique também os limites ^ e $: por padrão, eles se referem à mensagem inteira. Comece com um trecho simples e adicione as condições uma a uma, verificando o resultado a cada vez.