Considere un lenguaje de expresiones regulares con el cuantificador codicioso , el cuantificador no codicioso ∗ ? , alternancia ordenada y clases de caracteres. (Esto es esencialmente un sublenguaje de PCRE sin referencias posteriores, afirmaciones de búsqueda o algunos de los otros bits más elegantes).
Un partido para una expresión regular para R en una cadena s = s 0 ... s n es un intervalo semiabierto sobre N de tal manera que es un 0 ... es un 1 - 1 es aceptada por R .
Damos una definición recursiva de lo que hace que una coincidencia sea mejor que otra. Una coincidencia para la expresión regular R en una cadena es mejor que otra coincidencia b = [ b 0 , b 1 ) si a 0 < b 0 o, si a 0 = b 0 y:
Si es una clase de personaje: las clases de personaje tienen coincidencias únicas, por lo que todas las coincidencias en la misma posición para R son iguales. Por lo tanto, este caso es imposible.
Si :
- La parte inicial de es una mejor coincidencia para S que la parte inicial de b , o
- Las partes iniciales de y b son igualmente buenas coincidencias para S , y la parte posterior de a es una mejor coincidencia para T que la parte posterior de b .
Si :
- es un partido para S y b no es, o
- y b son igualmente adecuadas para S y una es una mejor coincidencia para S que b es, o
- y b no son compatibles para S pero son partidos de T , y una es una mejor coincidencia para T que b es.
Todas las demás formas sintácticas se reducen a las tres anteriores para propósitos de prioridad de coincidencia:
- : R ≡ S 0 | S 1 | ...
- : R ≡ … | S 1 | S 0
Estos patrones infinitos se utilizan solo con fines de prioridad de coincidencia --- no son parte del lenguaje de coincidencia en consideración.
La relación "mejor" es un orden lineal débil sobre todas las coincidencias posibles para un patrón dado.
Llaman dos expresiones regulares partido equivalente si, para cada cadena de entrada finita, el conjunto de pares disjuntos mejores resultados para S es igual al conjunto de pares disjuntos mejores resultados para T .
P: ¿Es el caso que por cada expresión regular contiene el cuantificador no arbóreo ∗ ? Hay una expresión regular equivalente T que no contiene cuantificadores no apetos?
Editar: Esta es una reescritura completa de la pregunta para aclarar lo que se estaba preguntando.
a+?
) sigue siendo {a ^ n: n≥1}. Si realiza una coincidencia de expresión regular no anclado (como 'aaaa' =~ /a+?/
en Perl), no obtendrá aaaa
como resultado, pero eso es solo porque las ramas se prueban en un orden diferente al a+
. Si lo haces apropiadamente con los anclajes (como 'aaaa' =~ /^a+?\z/
en Perl), obtienes aaaa
como resultado.
//g
devolvería una coincidencia global de expresiones regulares ( en Perl)?
\tt
no evita que LaTeX interprete caracteres especiales y secuencias de control!)