Respostas:
A macro rx
retorna seqüências de caracteres regexp que podem ser passadas para outras funções do Emacs.
ELISP> (rx (one-or-more (any upper lower)))
"[[:lower:][:upper:]]+"
ELISP> (rx (one-or-more (any "A-Z" "a-z")))
"[A-Za-z]+"
Isso não responde diretamente à sua pergunta; ele empurra a pergunta para "esses dois regexes são idênticos?" Então, vamos procurar uma letra maiúscula ou minúscula que não esteja entre A
e Z
, ou a
e z
. Vamos tentar á
.
ELISP> (string-match-p (rx (one-or-more (any upper lower))) "á")
0 (#o0, #x0, ?\C-@)
ELISP> (string-match-p (rx (one-or-more (any "A-Z" "a-z"))) "á")
nil
Portanto, as expressões regulares não são idênticas. Presumivelmente, você deseja usar a (rx (one-or-more (any upper lower)))
maior parte do tempo; não inclui apenas caracteres que a maioria das pessoas considera letras, mas eu argumentaria que também é mais legível.
[A-Z]
corresponde apenas a uma letra maiúscula ASCII , ou seja, uma letra deA
atravésZ
. Existem outras letras maiúsculas não ASCII (por exemplo, em outros idiomas que não o inglês).