Разница между регулярным выражением [Az] и [a-zA-Z] - PullRequest
46 голосов
/ 07 февраля 2011

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

Я продолжаю читать [a-zA-Z] в моих поисках и не упоминать [A-z].

Я использую Java String.matches(regex).

Ответы [ 6 ]

80 голосов
/ 07 февраля 2011

[A-z] будет соответствовать символам ASCII в диапазоне от A до z, а [a-zA-Z] будет соответствовать символам ASCII в диапазоне от A до Z и вдиапазон от a до z.На первый взгляд, это может показаться эквивалентным - однако, если вы посмотрите на эту таблицу символов ASCII, вы увидите, что A-z включает в себя несколько других символов.В частности, это [, \, ], ^, _ и ` (которые вам явно не нужны).

12 голосов
/ 07 февраля 2011

az соответствует 'a' to 'z' AZ соответствует 'A' - 'Z' Az соответствует всем этим, а также символам между 'Z' и 'a', которые являются [] ^ / _ `

См. http://www.asciitable.com/

9 голосов
/ 07 февраля 2011

Взгляните на ASCII таблицу . Вы увидите, что между Z и a есть несколько символов, так что вы будете соответствовать больше, чем предполагали.

8 голосов
/ 07 февраля 2011

Когда вы посмотрите на таблицу ASCII, вы увидите следующее:

A = 65
Z = 90
a = 97
z = 122

Итак, [A-z] будет соответствовать каждому символу от 65 до 122. Сюда входят также эти символы (91 -> 97):

 [\]^_`

Это означает, что [A-Za-z] будет соответствовать только алфавиту, без замеченных символов

7 голосов
/ 07 февраля 2011

Квадратные скобки создают класс символов, а дефис является сокращением для добавления каждого символа между двумя предоставленными символами.т.е. [A-F] может быть написано [ABCDEF].

Класс символов [A-z] будет сопоставлять каждый символ между этими символами, который в ASCII включает некоторые другие символы, такие как '[', '\' и ']'.

Альтернативауказав оба случая, можно установить регулярное выражение без учета регистра, используя модификатор /i.

4 голосов
/ 07 февраля 2011

Посмотрите на ASCII-диаграмму (на которой основаны символы Java): между Z и a расположено довольно много знаков препинания, а именно:

[\]^ _`
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...