Какой лучший способ сопоставить только буквы в Regex?

StackOverflow https://stackoverflow.com/questions/3754097

  •  04-10-2019
  •  | 
  •  

Вопрос

Я бы очень хотел использовать W, но он также соответствует подчеркиванию, поэтому я иду с [A-ZA-Z], который чувствует себя без необходимости влагосвященной и Америке. Есть лучший способ сделать это? Что-то вроде [ W ^ _] (я сомневаюсь, что получил этот синтаксис справа)?

Это было полезно?

Решение

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

Другие советы

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

Просто использовать \p{L} что означает «любое письмо Unicode» и работает в Perl (/\p{L}/). Вам, вероятно, надо use utf8;.

Соответствующие международный (т.е. не-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 :: семантика.

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

[^\W0-9_]

# or

[[:alpha:]]

Смотреть Perldoc. перлр

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

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. Отказ Также: Этот метод не пройдет критерии NO-подчеркивания, поскольку он включает в себя [ \ ] ^ _ ` .
  • Номер 4 будет соответствовать этим дополнительным языковым символам, но он также соответствует:
    ʹʺʻˍˎˏːˑˬˮ̀́ (плюс много других)

Вы ищете интернационализацию в вашем Regex? Тогда вам нужно сделать что-то вроде этого парня: Проблема проверки JavaScript с международными персонажами

Явно соответствует всем языкам Луны :)

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top