Pergunte até a alguém com experiência em ciência da computação o que é uma expressão regular e é provável que a resposta ultrapasse a restrição de estar ao alcance de um autômato de estado finito.
Por exemplo, a "expressão regular"
/^1?$|^(11+?)\1+$/
criado pela notável personalidade do Perl, Abigail (e parte do conjunto de testes do Perl desde 2002) descreve uma máquina que aceita apenas números unários compostos, mas o exercício 4.5 (b) da terceira edição de Uma Introdução às Linguagens Formais e Autômatos de Peter Linz, faz com que o leitor use o lema de bombeamento para provar que
não é uma linguagem comum.
Em contextos em que a distinção é importante, como devemos chamar expressões estritamente mais poderosas?
fonte
Essas expressões foram examinadas por Aho (Manual de Ciência da Computação Teórica, Vol. A, Cap. 5) e Campeanu, Salomaa, Yu ("Um estudo formal de expressões regulares práticas", International Journal of Foundations of Computer Science, 14: 1007 –1018, 2003), bem como alguns documentos de acompanhamento.
Aho chama as expressões mais poderosas de "rewbr" (expressão regular com referências anteriores), Campeanu et al. use "expressão regular estendida" e "expressão regular prática". Como parece, "expressão regular estendida" é o termo mais comumente usado na literatura recente.
Com base no termo "expressão racional" da escola francesa, e considerando o fato de que essas expressões são usadas no mundo real, eu próprio gosto de "expressão real".
Adendo: Um capítulo da minha tese de doutorado lida com essa classe de linguagens formais (o trabalho correspondente deve aparecer no STACS 2011). Enquanto escrevia esse capítulo e o artigo, experimentei vários termos. Finalmente, decidi usar expressões regulares estendidas para o modelo com referências anteriores e expressões regulares apropriadas para as expressões regulares agradáveis e normais. Como é bastante irritante mudar a terminologia em um artigo que já está completamente (ou quase todo) escrito, acho que alguns podem estar interessados nas experiências que levaram à minha escolha:
Primeiro, regex e rewbr realmente não rolam a língua, e usá-los repetidamente no decorrer de um artigo inteiro ficou realmente cansativo de escrever e ler, principalmente quando se usa qualquer uma das formas plurais possíveis. Expressões regulares semelhantes a PERL também eram bastante difíceis de manejar. Claro, eu não sou falante nativo, então YMMV.
Segundo, assim que alguém quiser falar sobre os dois modelos, é conveniente usar termos que são uma variação da expressão regular , pois isso permite enfatizar semelhanças ou diferenças conforme necessário (por exemplo, "uma expressão regular, seja apropriada ou não"). estendido "). Além disso, isso permite enfatizar facilmente o caso especial de "expressões regulares estendidas sem referências anteriores", quando se fala de casos especiais em toda a classe, em vez de comparar modelos diferentes.
Terceiro, preferi usar um termo que já é usado na literatura em vez de um termo recém-cunhado, o que me deixou a escolha entre expressões regulares estendidas e expressões regulares práticas . A segunda opção implicava (pelo menos implicitamente) que expressões regulares apropriadas são de alguma forma impraticáveis, o que parecia bastante estranho (especialmente porque o RE2 do Google não usa refexs e parece ser bastante prático).
Obviamente, essa escolha é apenas o meu "máximo local pessoal" e, dependendo das necessidades, outras opções podem ser mais apropriadas.
fonte
Sabe-se que o chamado regexp do perl é poderoso o suficiente para ser Turing completo; existe até um compilador do programa usual para o perl regexp.
Por isso, duvido que faça sentido procurar um nome para esse tipo de "regexps".
Veja, por exemplo, http://search.cpan.org/~asavige/Acme-EyeDrops-1.62/lib/Acme/EyeDrops.pm
fonte
?{CODE}
diretiva de Perl , que permite que expressões padrão intercalem o código do programa em expressões regulares. Entendo que os PCREs são usualmente definidos como sendo a parte "declarativa" da linguagem, sendo a linguagem inteira chamada de linguagem padrão. De acordo com WP, Aho, 1990, "Algoritmos para encontrar padrões em strings" mostra que o problema de associação para idiomas regulares com backtracking é NP completo. Não há outros recursos para PCREs declarativos.Penso que o melhor termo para "expressão regular no contexto de autômatos" é "expressão racional", como é usado, por exemplo, na Teoria dos Elementos de Automação de Sakarovitch, ou no Manual de Autômatos Ponderados.
fonte
Dadas as outras respostas, eu sugeriria que "linguagens regulares" são seguras e, depois de observar brevemente a diferença, falar sobre "expressões regulares práticas" para regexs (com retorno).
Observe também que o mesmo regexp, como expressões regulares e práticas, pode ter semântica diferente, porque neste último caso a semântica é definida em termos de retrocesso, com resultados diferentes. Os detalhes estariam fora do tópico, mas responderei se você fizer outra pergunta sobre isso (talvez no SO, e não aqui, não sei) e me notificará através de um comentário.
fonte
Poderíamos chamá-los de expressões padrão . Isso pode introduzir confusões com linguagens de padrões, mas pelo menos essas são menos comuns.
fonte