Existe alguma diferença principal entre "AZ" e superior?

7

Eu só quero ter certeza de que entendi isso corretamente.

(rx (one-or-more (any upper lower)))

é igual a

(rx (one-or-more (any "A-Z" "a-z")))

Corrigir?

serghei
fonte
6
[A-Z]corresponde apenas a uma letra maiúscula ASCII , ou seja, uma letra de Aatravés Z. Existem outras letras maiúsculas não ASCII (por exemplo, em outros idiomas que não o inglês).
Tirou

Respostas:

13

A macro rxretorna 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 Ae Z, ou ae 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.

zck
fonte