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

Является ли регулярное выражение [a-Z] действительным, и если да, то это то же самое, что [a-zA-Z]?

Является ли регулярное выражение [a-Z] действительным, и если да, то это то же самое, что и [a-zA-Z]? Обратите внимание, что в [a-Z] a имеет строчный регистр, а Z - в верхнем регистре.

Edit:

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

Спасибо всем, кто внес свой вклад в ответ.

4b9b3361

Ответ 1

Нет, a (97) выше, чем Z (90). [a-Z] не является допустимым классом символов. Однако [a-Z] также не будет эквивалентным, но по другой причине. Он будет охватывать все буквы, но также будет содержать символы между прописными и строчными буквами: [\]^_`.

Ответ 2

Я не уверен в реализации других языков, но на PHP вы можете сделать

"/[a-z]/i"

и это будет нечувствительным. Вероятно, что-то похожее для других языков.

Ответ 3

Вы не укажете, какой язык, но в целом [a-Z] не будет допустимым диапазоном, так как в ASCII строчные альфа-символы появляются после верхних регистров. [a-Z] может быть допустимым диапазоном (с указанием всех альфах верхнего и нижнего регистров, а также знаков препинания, которые появляются между Z и a), но это может быть не так, в зависимости от конкретной реализации. Флаг i может быть добавлен в регулярное выражение, чтобы сделать его нечувствительным к регистру; проверьте свою конкретную реализацию для инструкций о том, как указать этот флаг.

Ответ 4

Вы всегда можете попробовать:

 print "ok" if "monkey" =~ /[a-Z]/;

Perl говорит

Invalid [] range "a-Z" in regex; marked by <-- HERE in m/[a-Z <-- HERE ]/ at a-z.pl line 4.

Ответ 5

Если он действителен, он не будет делать то, что вы ожидаете.

Символьный код Z ниже символьного кода a, поэтому, если коды заменяются на средний диапазон [Z-a], он будет таким же, как [Z\[\\\]^_`a], то есть он будет содержать символы Z и a, а символы между ними.

Если вы используете [A-z] для получения всех символов верхнего и нижнего регистра, это все равно не то же самое, что и [A-Za-z], это то же самое, что и [A-Z\[\\\]^_`a-z].

Ответ 6

Нет, это неверно, вероятно, потому, что значения ASCII не являются последовательными от z до A.

Ответ 7

Я только что упал на это в script (не моем).

Кажется, что grep, awk, sed принимают [a-Z] на основе вашей локали (т.е. переменной среды LANG или LC_CTYPE). В POSIX, [a-Z] не допускается этими инструментами, но в некоторых других локалях (например, en_gb.utf8) он работает и совпадает с [a-zA-Z].

Да, я проверил, он не соответствует ни одному из _^[]`.

Учитывая, что для отладки потребовалось довольно много времени, я решительно не рекомендую кому-либо использовать [a-Z] в регулярном выражении.