Gibt es einen Hauptunterschied zwischen "AZ" und "Upper"?

7

Ich möchte nur sicherstellen, dass ich das richtig verstanden habe.

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

entspricht

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

Richtig?

Serghei
quelle
6
[A-Z]Entspricht nur einem ASCII- Großbuchstaben, dh einem Buchstaben von Abis Z. Es gibt andere Nicht-ASCII-Großbuchstaben (z. B. in anderen Sprachen als Englisch).
Drew

Antworten:

13

Das Makro rxgibt 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 Aund Z, oder aund 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.

zck
quelle