grep
como a maioria dos mecanismos de expressão regulares traduz o padrão que você especifica para um autômato de estado finito determinístico (DFA).
Uma maneira comum de expressar insensibilidade a maiúsculas e minúsculas é usando classes de caractere para cada alfabético, portanto, seu exemplo seria mais parecido com [aA][bB][cC]
. As correspondências de classe de caractere individuais são geralmente implementadas como pesquisas de conjunto de bits em que um conjunto de bits contendo 1
s nas posições correspondentes a a
e A
é criado na expressão regular - > Tempo de compilação do DFA.
Isso significa que para corresponder a [aA]
, o DFA precisa apenas pegar o valor do caractere de entrada, usá-lo como um índice para o conjunto de bits - que é uma operação O (1) - então você não vê a explosão combinatória de tempo que o seu equivalente
"abc|abC|aBc|aBC|Abc|AbC|ABc|ABC"
sugeriria. A construção do DFA a partir de expressões regulares é uma aplicação de "se você estiver disposto a gastar um tempo adiantado (construção do DFA), poderá realmente salvar os ciclos mais tarde (reconhecimento do DFA).