Как я могу определить, является ли текущий символ буквой (буквенным символом) (то есть принадлежит ли класс синтаксиса [:alpha:]
в понятиях регулярного выражения). Я хотел бы написать простую функцию, как показано ниже:
(defun test-letter () (interactive)
(if char-after-is-a-letter
(message "This is a letter")
(message "This is not a letter")
)
)
Обновление
К сожалению, мое предположение об эквивалентности класса букв и класса синтаксиса [:alpha:]
представляется неверным.
elisp
characters
имя
источник
источник
۱۲۳۴۵۶۷۸۹۰
но есть некоторые негативы, например, арабский или иврит алеф:א
,ا
.五
считается число5
на японском языке. Ваш код считает это письмо. Может быть, это буква (как в римском номереv
). Может быть, кто-то, кто знаком с японским языком, может это проверить.五
это как английское словоfive
, так что это буква. При написании числа 5 вместо слова пять они используют5
точно так же, как английский.РЕДАКТИРОВАТЬ: Этот ответ должен быть полностью действительным в 25,5 (где ошибка была исправлена). Для более старых версий используйте другой вариант .
Это должно сказать вам, если текущий символ является буквой, и должен работать на любом языке.
источник
looking-at-p
вашим решением иlooking-at
другим ответом.looking-at-p
не устанавливает данные о совпадении.match-string
(и его многократные братья и сестры) вернут результат поиска. Между тем, с версией без предиката, match-string будет возвращать результат сопоставления.Я думаю, что вы можете сойти с рук:
Обновить
Это менее эффективно, но ближе к тому, что вы хотите:
источник
۹
(то есть, индийскую цифру 9) или٪
как букву.ζ
илиα
), но обновление не.Если вы очень беспокоились о национальных символах и точном обращении с классами символов Unicode, то единственное решение, которое мне удалось найти, - это
regex
библиотека Python . И то,grep
и другоеPerl
(к моему крайнему удивлению!) Не справились со своей задачей.Таким образом, регулярное выражение вы после это одна:
\p{L}
. Это называется сокращенной версией свойства Unicode, полная версия -\p{Letter}
или дажеp\{General_Category=Letter}
.Letter
сам по себе составной класс, но я не буду вдаваться в подробности, лучшая ссылка, которую я смог найти по этому вопросу, здесь .Библиотека Python не встроена в язык (это альтернатива встроенной
re
библиотеке). Итак, вам нужно будет установить его, например:Затем вы можете использовать его так:
Вы также можете поместить этот скрипт где-нибудь, где вы можете получить к нему доступ:
И назовите его из Emacs следующим образом (предположим, вы сохранили этот скрипт в
~/bin
):источник