Antworten:
Das Makro rx
gibt Regexp-Zeichenfolgen zurück, die an andere Emacs-Funktionen übergeben werden können.
ELISP> (rx (one-or-more (any upper lower)))
"[[:lower:][:upper:]]+"
ELISP> (rx (one-or-more (any "A-Z" "a-z")))
"[A-Za-z]+"
Das beantwortet Ihre Frage nicht direkt. es wirft die Frage auf: "Sind diese beiden regulären Ausdrücke identisch?" Suchen wir also nach einem Groß- oder Kleinbuchstaben, der nicht zwischen A
und Z
, oder a
und liegt z
. Lass es uns versuchen á
.
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
Die regulären Ausdrücke sind also nicht identisch. Vermutlich möchten Sie die (rx (one-or-more (any upper lower)))
meiste Zeit verwenden; Es enthält nicht nur Zeichen, die die meisten Leute als Buchstaben betrachten, sondern es ist auch besser lesbar.
[A-Z]
Entspricht nur einem ASCII- Großbuchstaben, dh einem Buchstaben vonA
bisZ
. Es gibt andere Nicht-ASCII-Großbuchstaben (z. B. in anderen Sprachen als Englisch).