Мне бы очень хотелось использовать \w, но он также соответствует символам подчеркивания, поэтому я собираюсь с [A-Za-z], который чувствует себя излишне подробным и ориентированным на Америку. Есть лучший способ сделать это? Что-то вроде [\ w ^ _] (я сомневаюсь, что я правильно понял этот синтаксис)?
Каков наилучший способ сопоставить только буквы в регулярном выражении?
Ответ 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 будет соответствовать этим дополнительным языковым символам, но оно также соответствует:
ʹʺʻˍˎˏːˑˬˮ̀́
(плюс многие другие).
Ответ 7
вы ищете интернационализацию в своем регулярном выражении? то вам нужно будет сделать что-то вроде этого парня: Проблема с проверкой JavaScript с международными символами
явно соответствует всем буквам языка луны:)