Регулярное выражение для соответствия только буквенным символам

157

Мне было интересно, смогу ли я получить регулярное выражение, которое будет соответствовать строке, содержащей только буквенные символы, и только это.

Стеффан Харрис
источник
2
Что-то вроде / ^ [a-zA-Z] + $ / должно работать.
Джулиан Го
10
Является àли буквенный символ по вашему определению? Какой язык вы используете?
Тим Пицкер
2
должна совпадать пустая строка?
ysth
Нету пустая строка не должна совпадать
Штеффан Харрис
Одно важное замечание: вы не ссылались на язык или инструмент, в котором вы хотели бы использовать заданное вами регулярное выражение. Хотя принципы регулярных выражений универсальны, синтаксис не везде одинаков. Вы должны указать, где вы хотите его использовать.
Сергиол

Ответы:

186

Вы можете использовать любой из этих 2 вариантов:

/^[A-Z]+$/i
/^[A-Za-z]+$/

соответствовать входной строке алфавитов ASCII.

  • [A-Za-z] будет соответствовать всем алфавитам (как строчные, так и прописные).
  • ^и $убедитесь, что ничего, кроме этих алфавитов не будет сопоставлено.

Код:

preg_match('/^[A-Z]+$/i', "abcAbc^Xyz", $m);
var_dump($m);

Вывод:

array(0) {
}

Тестовый пример предназначен для комментария ОП, который он хочет сопоставить, только если на входе присутствует 1 или более алфавитов. Как вы можете видеть в тестовом примере, совпадение не удалось, потому что ^во входной строке было abcAbc^Xyz.

Примечание. Обратите внимание, что приведенный выше ответ соответствует только алфавиту ASCII и не соответствует символам Unicode. Если вы хотите сопоставить буквы Unicode, используйте:

/^\p{L}+$/u

Здесь \p{L}совпадает любой вид письма с любого языка

анубхава
источник
22
На некоторых диалектах [Az] будет соответствовать значениям пунктуации ASCII, которые встречаются между 'Z' и 'a', в частности, '[', '\', ']', '^', '-' и '`', как также от «A» до «Z» и «от» до «z».
Ли
То, что я действительно хотел, это способ сопоставления моей строки только тогда, когда она имеет буквенные символы, если она имеет не алфавитный символ, она не должна совпадать.
Штеффан Харрис
7
@ Ли: не некоторые. Все они. Это регулярное выражение неверно в своем текущем состоянии.
Тим Пицкер
7
\w is shorthand for A-Za-z- не совсем, \wэто сокращение от[a-zA-Z0-9_]
анубхава
1
Хороший вопрос @ jpmc26. Я отредактировал свой ответ, чтобы удалить мою первоначальную ошибку.
анубхава
55

Если вам нужно включить не-ASCII буквенные символы, и если ваш регулярный код поддерживает Unicode, то

\A\pL+\z

будет правильным регулярным выражением.

Некоторые движки регулярных выражений не поддерживают этот синтаксис Unicode, но позволяют \wбуквенно-цифровому сокращению также соответствовать не-ASCII символам. В этом случае вы можете получить все алфавиты, вычтя цифры и подчеркивания из \wэтого:

\A[^\W\d_]+\z

\Aсовпадает в начале строки, \zв конце строки ( ^а $также совпадает в начале / конце строк в некоторых языках, таких как Ruby, или если установлены определенные параметры регулярного выражения).

Тим Питцкер
источник
38
+1 за то, что английский алфавит не считается единственным алфавитом
srcspider
7
+1, как и выше. английский не единственный алфавит, и многие люди пишут свое имя, используя не-ascii символы, чтобы выразить его правильно.
Бен Баркай
22

Это будет соответствовать одному или нескольким буквам алфавита:

/^[a-z]+$/

Вы можете сделать это без учета регистра, используя:

/^[a-z]+$/i

или:

/^[a-zA-Z]+$/
stevecomrie
источник
Это будет соответствовать только латинским символам.
цитируетBro
13

В Ruby и других языках, которые поддерживают классы символов POSIX в выражениях в скобках, вы можете сделать просто:

/\A[[:alpha:]]+\z/i

Это будет соответствовать альфа-символам на всех языках алфавита Unicode. Очень просто.

Дополнительная информация: http://en.wikipedia.org/wiki/Regular_expression#Character_classes http://ruby-doc.org/core-2.0/Regexp.html

jshkol
источник
1
И получить все, кроме тех персонажей (которые не были задокументированы) [^[:alpha]].
spyle
6

[a-zA-Z] должен сделать это просто отлично.

Вы можете ссылаться на шпаргалку .

Фразелл Томас
источник
2
да, но я бы также, если бы моя строка содержала символ, не
состоящий из