Я думаю, что когда вы определяете String
, вы определяете объект. Поэтому вам нужно использовать .equals()
. Когда вы используете примитивные типы данных, вы используете ==
, но с String
(и любым объектом) вы должны использовать .equals()
.
Нет, a
(97) выше, чем Z
(90). [aZ]
недопустимый класс символов. Однако [Az]
тоже не будет эквивалентным, но по другой причине. Он будет охватывать все буквы, но также включать символы между прописными и строчными буквами: [\] ^ _ `
.
Я не уверен в реализациях других языков, но в PHP вы можете сделать
"/[a-z]/i"
, и он будет нечувствителен к регистру . Возможно, что-то подобное есть и для других языков.
Вы не указываете, на каком языке, но в целом [aZ]
не будет допустимым диапазоном, так как в ASCII буквы нижнего регистра идут после заглавных. [Az]
может быть допустимым диапазоном (с указанием всех букв в верхнем и нижнем регистре, а также знаков препинания между Z
и a
) ), но это может быть не так, в зависимости от вашей конкретной реализации. Флаг i
можно добавить к регулярному выражению, чтобы сделать его нечувствительным к регистру; проверьте свою конкретную реализацию, чтобы узнать, как указать этот флаг.
] Вы всегда можете попробовать:
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.
Нет, это недопустимо, вероятно, потому что значения ASCII не являются последовательными от z до A.
Если он действителен, он не будет делать то, что вы ожидаете.
Код символа Z ниже, чем код символа a, поэтому, если коды поменяны местами, чтобы обозначить диапазон [Za]
, он будет таким же, как [Z \ [\\\] ^ _ ʻa]
, то есть будет включать символы Z
и a
и символы между.
Если вы используете [Az]
для получения всех символов верхнего и нижнего регистра, это все равно не то же самое, что [A- Za-z]
, это то же самое, что [AZ \ [\\\] ^ _ ʻaz]
.