¿Hay alguna diferencia principal entre "AZ" y superior?

7

Solo quiero asegurarme de haber entendido esto correctamente.

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

es igual a

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

¿Correcto?

serghei
fuente
66
[A-Z]solo coincide con una letra mayúscula ASCII , es decir, una letra de Ahasta Z. Hay otras letras mayúsculas que no son ASCII (p. Ej., En otros idiomas además del inglés).
Dibujó el

Respuestas:

13

La macro rxdevuelve cadenas regexp que se pueden pasar a otras funciones de Emacs.

ELISP> (rx (one-or-more (any upper lower)))
"[[:lower:][:upper:]]+"
ELISP> (rx (one-or-more (any "A-Z" "a-z")))
"[A-Za-z]+"

Eso no responde su pregunta directamente; empuja la pregunta a "¿son estas dos expresiones regulares idénticas?" Entonces, busquemos una letra mayúscula o minúscula que no esté entre Ay Z, o ay z. Try de Let á.

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

Entonces las expresiones regulares no son idénticas. Presumiblemente quieres usar la (rx (one-or-more (any upper lower)))mayor parte del tiempo; no solo incluye caracteres que la mayoría de la gente piensa como letras, sino que también diría que es más legible.

zck
fuente