Câu trả lời:
Macro rx
trả về các chuỗi regrec có thể được truyền cho các hàm Emacs khác.
ELISP> (rx (one-or-more (any upper lower)))
"[[:lower:][:upper:]]+"
ELISP> (rx (one-or-more (any "A-Z" "a-z")))
"[A-Za-z]+"
Điều đó không trả lời trực tiếp câu hỏi của bạn; nó đẩy câu hỏi đến "hai biểu thức này có giống nhau không?" Vì vậy, chúng ta hãy tìm một chữ cái viết hoa hoặc viết thường không nằm giữa A
và Z
, hoặc a
và z
. Hãy thử xem á
.
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
Vì vậy, các biểu thức không giống nhau. Có lẽ bạn muốn sử dụng (rx (one-or-more (any upper lower)))
hầu hết thời gian; nó không chỉ bao gồm các ký tự mà hầu hết mọi người nghĩ là chữ cái, mà tôi tranh luận cũng dễ đọc hơn.
[A-Z]
chỉ khớp với một chữ cái viết hoa ASCII , nghĩa là một chữ cáiA
xuyên quaZ
. Có những chữ cái viết hoa không phải ASCII khác (ví dụ, bằng các ngôn ngữ khác tiếng Anh).