Подтвердить что ты не робот

Каков наилучший способ сопоставить только буквы в регулярном выражении?

Мне бы очень хотелось использовать \w, но он также соответствует символам подчеркивания, поэтому я собираюсь с [A-Za-z], который чувствует себя излишне подробным и ориентированным на Америку. Есть лучший способ сделать это? Что-то вроде [\ w ^ _] (я сомневаюсь, что я правильно понял этот синтаксис)?

4b9b3361

Ответ 1

Вы также можете использовать /[a-z]/i или /[[:alpha:]]/. Фактически, \w содержит числа, которые даже не будут работать.

Ответ 2

Возможно, вы имеете в виду /[[:alpha:]]/? См. perlre для обсуждения классов символов POSIX.

Ответ 3

Просто используйте \p{L}, что означает "любая буква Юникода" и работает в Perl (/\p{L}/). Вероятно, вам нужно use utf8;.

Ответ 4

Соответствующие международные (например, не-ASCII) персонажи являются довольно жесткими и могут зависеть от многих вещей. Проверьте этот пример:

#!perl -w

use strict;
use utf8;

my $string = "ä";

print "matched :alpha:\n"  if $string =~ /[[:alpha:]]/;
print "matched ^\\W0-9_\n" if $string =~ /[^\W0-9_]/;
print "matched [a-zA-Z]\n" if $string =~ /[a-zA-Z]/;
print "matched [a-z]i\n"   if $string =~ /[a-z]/i;
print "matched [A-z]\n"    if $string =~ /[A-z]/;

Для меня это приводит к

matched :alpha:

Если вы удалите use utf8, то ни одно из регулярных выражений не будет соответствовать.

Рассматривая этот очень важный вопрос, похоже, что вы, вероятно, захотите use utf8 и посмотрите Unicode::Semantics.

Конечно, если вы используете прямые символы ASCII, чем любое из вышеупомянутых регулярных выражений, это будет работать.

Ответ 5

[^\W0-9_]

# or

[[:alpha:]]

См. perldoc perlre

Ответ 6

Несколько вариантов:

1. /[a-z]/i               # case insensitive
2. /[A-Z]/i               # case insensitive
3. /[A-z]/                # explicit range listing (capital 'A' to lowercase 'z')
4. /[[:alpha:]]/          # POSIX alpha character class

Я рекомендую использовать либо нечувствительный к регистру, либо истинный способ /[a-zA-z]/, если у вас нет определенного предпочтения языка.

Примечание:

  • Число 3 требует капитала "A" сначала, а затем строчного "z" из-за порядка значений ASCII; он не работает, если вы делаете обратное: a-Z. Кроме того: этот метод не будет отвечать критериям без подчеркивания, поскольку он включает [\] ^ _ `.
  • Число 4 будет соответствовать этим дополнительным языковым символам, но оно также соответствует:
    ʹʺʻˍˎˏːˑˬˮ̀́ (плюс многие другие).