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?


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.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.