Como as expressões regulares funcionam nos bastidores (no nível da CPU)?

Os intérpretes e compiladores comparam (e finalmente combinam) duas seqüências de caracteres para uma possível correspondência de maneira caractere por caractere e da esquerda para a direita? Ou existe um valor binário subjacente (por exemplo, um padrão de bits) atribuído a cada string em uma função de comparação? Ou isso depende da string ser codificada de uma certa maneira (ASCII ou UTF-32), ou do intérprete, compilador, mecanismo de banco de dados ou linguagem de programação?

Redesenhar o armazenamento de dados (arquivos ou bancos de dados) é um esforço considerável. A resposta para uma pergunta semelhante no stackoverflow não descreveu definitivamente a pergunta de codificação (se os padrões de bits estavam sendo avaliados ou os caracteres alfabéticos reais). A resposta a esta pergunta pode ser importante para um esforço de otimização.

Não quero saber como implementar uma expressão regular (por exemplo, escrever minha própria). Quero saber, para fins educacionais, para o benefício de usar expressões regulares existentes de uma maneira ideal (por exemplo, quando é hora de projetar dados para serem armazenados como uma composição de substrings, devo estar atento à avaliação da esquerda para a direita). Uma pergunta semelhante ao StackOverflowresponda (que é um link que possui um certificado não confiável para visualizá-lo) se concentra em autômatos finitos (a teoria de como as strings são comparadas). Essa resposta enfatiza como ele pode funcionar e a complexidade computacional da comparação de strings. Isso implica que há uma avaliação de caráter da esquerda para a direita. Eu não acho que foi definitivo por qualquer meio. O artigo foi amplamente específico para Perl e o algoritmo de autômato finito não determinístico da Thomson, independente da linguagem. Gostaria de ter certeza com essas três combinações de tecnologia: 1) funções nativas Java usando arquivos de dados ASCII, 2) MySQL (dados da tabela e instruções SELECT) e 3) com funções nativas Python e arquivos de dados UTF-32.

Minha pergunta e abordagem são diferentes das postagens mais antigas, pois não estou tentando desenvolver um analisador para fazer expressões regulares. Estou tentando arquitetar dados para desenvolvimento futuro. Quero saber como utilizar as ferramentas regex existentes da maneira ideal. Acredito que o stackoverflow é o fórum certo, porque é central para as expressões regulares, e essa pergunta em sua forma original e menos detalhada foi votada.

Eu quero saber no nível da CPU, são padrões de bits as representações dos caracteres na string? Existe um índice de curta duração dos padrões de bits correspondentes a cada caractere das seqüências participantes nas comparações em que uma sequência está ancorada? Eu pensaria que a tecnologia (por exemplo, o banco de dados, a linguagem de programação e / ou a codificação dos dados) variaria.

questionAnswers(3)

yourAnswerToTheQuestion