← Últimos artigos
💻 computer science

Towards Efficient Matching of Regexes with Backreferences using Register Set Automata (Technical Report)

Este relatório técnico propõe o uso de autômatos de conjuntos de registradores (RSAs) para permitir a correspondência rápida e robusta de expressões regulares com referências reversas, demonstrando que essa abordagem oferece complexidade de tempo linear ou quadrática, resolve o problema de vazio de forma decidível e supera significativamente os limitadores dos matchers de estado da arte.

Autores originais: Vojtěch Havlena, Lukáš Holík, Ondřej Lengál, Jan Vašák, Sabína Gulčíková

Publicado 2026-04-16
📖 5 min de leitura🧠 Leitura aprofundada

Autores originais: Vojtěch Havlena, Lukáš Holík, Ondřej Lengál, Jan Vašák, Sabína Gulčíková

Artigo original sob licença CC BY 4.0 (http://creativecommons.org/licenses/by/4.0/). Esta é uma explicação gerada por IA do artigo abaixo. Não foi escrita nem endossada pelos autores. Para precisão técnica, consulte o artigo original. Ler aviso legal completo

Imagine que você é um detetive tentando encontrar um padrão específico em uma montanha de documentos. Às vezes, o padrão é simples, como "encontrar todas as palavras que começam com 'A'". Mas, às vezes, o padrão é um quebra-cabeça complexo: "Encontre uma frase onde a primeira palavra seja exatamente igual à última, e a segunda seja igual à penúltima".

No mundo da computação, isso é feito usando Expressões Regulares (Regex). Elas são como receitas para encontrar textos. O problema é que, quando essas receitas têm "referências" (como pedir para repetir uma parte que já foi encontrada antes), os computadores tradicionais ficam confusos. Eles começam a tentar todas as combinações possíveis, como um rato num labirinto que volta e recua infinitamente. Se alguém enviar um texto malicioso, esse "rato" pode travar o computador inteiro, causando o que chamamos de ataque ReDoS (negação de serviço por expressão regular). É como se um ladrão entrasse no seu sistema e dissesse: "Vou te fazer procurar por uma agulha num palheiro, mas vou te fazer procurar em cada palha, uma por uma, por 100 anos".

A Solução: O "Cesto de Memória" Inteligente

Os autores deste artigo, da República Tcheca e Dinamarca, propuseram uma nova maneira de fazer essa busca, chamando-a de Autômatos de Conjuntos de Registradores (RSAs).

Para entender como funciona, vamos usar uma analogia:

1. O Método Antigo (O "Backtracking" ou "Devolução")

Imagine que você está tentando montar um quebra-cabeça gigante. O método antigo pega uma peça, tenta encaixar, não serve, tira, tenta outra, não serve, tira, e volta para a primeira tentativa. Se o quebra-cabeça for grande e tiver peças parecidas, você pode passar a vida inteira tentando encaixar as mesmas peças de formas diferentes. É lento e perigoso.

2. O Novo Método (Os "Registradores de Conjuntos")

A nova ideia é ter cestos (os registradores) que não guardam apenas uma coisa, mas um conjunto de coisas.

  • O Problema: Imagine que você precisa lembrar de todas as cores de bolas que você já viu para saber se a próxima bola é nova ou repetida.
  • O Velho Registrador: Era como ter um único balde onde você só podia colocar uma bola por vez. Se você visse uma bola vermelha, guardava. Se visse uma azul, tinha que jogar a vermelha fora para guardar a azul. Se precisasse lembrar das duas, entrava em pânico e tentava todas as combinações.
  • O Novo Registrador (RSA): É como ter um balde grande onde você pode jogar todas as bolas que vê.
    • Se você vê uma bola vermelha, joga no balde.
    • Se vê uma azul, joga no mesmo balde.
    • Agora, o balde contém {Vermelho, Azul}.
    • Quando chega uma bola nova, você só olha dentro do balde. Se a cor já estiver lá, você sabe que é uma repetição. Se não estiver, você joga ela no balde também.

Isso elimina a necessidade de "voltar e tentar de novo". O computador segue o caminho direto, como se tivesse um mapa completo, em vez de se perder no labirinto.

Por que isso é importante?

  1. Velocidade e Segurança: Com essa nova técnica, o computador não trava, não importa quão complexo seja o padrão ou quão malicioso seja o texto de entrada. A busca é feita em tempo linear (se o texto tem 100 letras, o computador dá 100 passos, nem um a mais). Isso protege sites e servidores contra ataques que tentam derrubá-los.
  2. A "Mágica" da Determinização: Os autores criaram um algoritmo que transforma essas receitas complexas (Regex) em máquinas determinísticas (DRSAs). É como transformar uma receita de bolo escrita em um código secreto confuso em uma lista de instruções passo-a-passo que qualquer um pode seguir sem errar.
  3. Teoria vs. Prática: Eles provaram matematicamente que essa nova máquina é poderosa (pode resolver problemas que outras não conseguem) e que, embora seja complexa de construir, uma vez construída, ela funciona de forma previsível e rápida.

Resumo da Ópera

Pense no mundo digital como uma biblioteca gigante. Antigamente, se você pedisse para o bibliotecário encontrar "todos os livros onde o autor do capítulo 1 é o mesmo do capítulo 3", ele poderia passar dias vasculhando as prateleiras, pegando e devolvendo livros, ficando exausto e talvez desistindo (ou travando o sistema).

Com os Autômatos de Conjuntos de Registradores, o bibliotecário ganha um cesto mágico. Ele pega o autor do capítulo 1 e joga no cesto. Pega o do capítulo 2 e joga no cesto. Quando chega no capítulo 3, ele só olha no cesto. Se o nome estiver lá, ele sabe imediatamente. Se não, ele joga no cesto e segue em frente.

O resultado? A biblioteca nunca mais trava, o bibliotecário nunca fica exausto e os "ladrões" que tentavam fazer o sistema colapsar agora encontram apenas um sistema rápido, eficiente e seguro.

Os autores criaram um protótipo que já mostra que essa ideia funciona na prática, superando os métodos atuais e tornando a internet um lugar mais seguro contra esse tipo de ataque específico.

Afogado em artigos na sua área?

Receba digests diários dos artigos mais recentes que correspondam às suas palavras-chave de pesquisa — com resumos técnicos, no seu idioma.

Experimentar Digest →