¿Cómo funcionan las expresiones regulares detrás de escena (a nivel de CPU)?

¿Los intérpretes y los compiladores comparan (y finalmente combinan) dos cadenas para una posible coincidencia de una manera carácter a carácter y de izquierda a derecha? ¿O hay un valor binario subyacente (por ejemplo, un patrón de bits) asignado a cada cadena en una función de comparación? ¿O depende de que la cadena se codifique de cierta manera (ASCII o UTF-32), o del intérprete, compilador, motor de base de datos o lenguaje de programación?

Rediseñar el almacén de datos (archivos de datos o bases de datos) es un esfuerzo considerable. La respuesta a una pregunta similar sobre stackoverflow no describió definitivamente la pregunta de codificación (si se estaban evaluando patrones de bits o caracteres alfabéticos reales). La respuesta a esta pregunta podría ser importante para un esfuerzo de optimización.

No quiero saber cómo implementar una expresión regular (por ejemplo, escribir la mía propia). Quiero saber con fines educativos para el beneficio de utilizar expresiones regulares existentes de una manera óptima (por ejemplo, cuando es el momento de diseñar datos para almacenarlos como una composición de subcadenas, debería tener en cuenta la evaluación de izquierda a derecha). Una pregunta similar de StackOverflowresponder (que es un enlace que tiene un certificado no confiable para verlo) se centra en autómatas finitos (la teoría de cómo se comparan las cadenas). Esa respuesta enfatiza cómo puede funcionar y la complejidad computacional de comparar cadenas. Implica que hay una evaluación de carácter de izquierda a derecha. No creo que haya sido definitivo de ninguna manera. El artículo fue en gran medida específico para Perl y el algoritmo de autómata finito no determinista agnóstico de Thomson. Me gustaría saber con certeza con estas tres combinaciones de tecnología: 1) funciones nativas de Java utilizando archivos de datos ASCII, 2) MySQL (datos de tabla y sentencias SELECT), y 3) con funciones nativas de Python y archivos de datos UTF-32.

Mi pregunta y mi enfoque son diferentes a los de la publicación anterior, ya que no estoy tratando de desarrollar un analizador sintáctico para hacer expresiones regulares. Estoy tratando de diseñar datos para el desarrollo futuro. Quiero saber cómo utilizar las herramientas de expresiones regulares existentes de manera óptima. Creo que stackoverflow es el foro correcto porque es fundamental para las expresiones regulares, y esta pregunta en su forma original y menos detallada ha sido votada.

Quiero saber a nivel de CPU, ¿son los patrones de bits las representaciones de los caracteres en la cadena? ¿Existe un índice de corta duración de los patrones de bits correspondientes a cada carácter de las cadenas que participan en las comparaciones en las que una cadena está anclada? Creo que la tecnología (por ejemplo, la base de datos, el lenguaje de programación y / o la codificación de los datos) variaría.

Respuestas a la pregunta(3)

Su respuesta a la pregunta