Considere uma linguagem regex com o quantificador ganancioso , o quantificador não-viciado, alternância ordenada e classes de caracteres. (Essa é essencialmente uma sub-linguagem do PCRE, sem referências anteriores, afirmações gerais ou alguns dos outros bits mais sofisticados.)∗ ?
Uma correspondência para um regex em uma sequência é um intervalo semiaberto sobre modo que seja aceito por .R s = s 0 … s n N s a 0 … s a 1 - 1 R
Damos uma definição recursiva do que torna uma correspondência melhor que a outra. Uma correspondência para a expressão regular R em uma sequência é melhor que outra correspondência b = [ b 0 , b 1 ) se a 0 < b 0 ou, se a 0 = b 0 e:
Se é uma classe de personagem: As classes de caracteres têm correspondências únicas, portanto, todas as correspondências na mesma posição para R são iguais. Portanto, este caso é impossível.
Se :
- A parte principal de é uma correspondência melhor para S do que a parte principal de b , ou
- As principais partes de e b são igualmente bons resultados para S , e a porção traseira de uma for mais semelhante para T do que o troço traseiro de b .
Se :
- é uma correspondência para S e b não é, ou
- e b são iguais para S e a é melhor para S do que b , ou
- e b não são resultados para S , mas são jogos para T , e um é uma melhor correspondência para T do que b é.
Todas as outras formas sintáticas são reduzidas às três acima para fins de prioridade de correspondência:
- : R ≡ S 0 | S 1 | …
- : R ≡ ... | S 1 | S 0
Esses padrões infinitos são usados apenas para fins de prioridade de correspondência - eles não fazem parte do idioma da correspondência em consideração.
A relação "melhor" é uma ordem linear fraca em todas as correspondências possíveis para um determinado padrão.
Chamada duas expressões regulares match-equivalente se, para toda a cadeia de entrada finito, o conjunto de pares disjuntos melhor correspondência com S é igual ao conjunto de pares disjuntos melhores jogos para T .
P: É o caso de cada regex contém o quantificador não-remediado ∗ ? existe um regex equivalente de correspondência T que não contém quantificadores não-remediados?
Editar: Esta é uma reescrita completa da pergunta para esclarecer o que estava sendo solicitado.
a+?
) ainda é {a ^ n: n≥1}. Se você executar uma correspondência regex não ancorada (como 'aaaa' =~ /a+?/
em Perl), não obterá aaaa
como resultado, mas isso ocorre apenas porque as ramificações são tentadas em uma ordem diferente da a+
. Se você fizer isso adequadamente com âncoras (como 'aaaa' =~ /^a+?\z/
no Perl), obtém o aaaa
resultado.
//g
em Perl) retornaria?
\tt
Não impede LaTeX de interpretar caracteres especiais e seqüências de controle!)