Является ли регулярное выражение [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] более компактной версией.
Спасибо всем, кто внес свой вклад в ответ.
Ответы
Ответ 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]
в регулярном выражении.