Не могу понять, почему регулярное выражение соответствует определенным символам [duplicate]

Эта ошибка означает, что вы пытаетесь загрузить файл класса «Java», который был скомпилирован с более новой версией Java, чем вы установили.

Например, ваш файл .class мог быть скомпилирован для JDK 7, и вы пытаетесь запустить его с помощью JDK 6.

Таким образом, решение будет либо:

  • Обновите свою рабочую среду Java или
  • Перекомпилируйте класс, если у вас есть источник, используя локальный компилятор Java (если он у вас есть). javac FileName.java

Для разработчиков это может произойти, если другой разработчик проверяет файл .class, и у них есть более новая версия java, чем у вас есть.

45
задан Wintermute 21 April 2015 в 12:14
поделиться

3 ответа

Поскольку ваш класс символов [A-z] соответствует этому символу.

[A-z] соответствует [, \, ], ^, _, ` и английские буквы.

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

Вот визуализация из Expresso, показывающая, что на самом деле охватывает диапазон [A-z]:

screenshot from Expresso showing the ASCII table, where you can see what the [A-z] range actually covers [/g1]

Итак, это регулярное выражение (с опцией i) не будет записывать вашу строку.

^(?=.*[0-9])(?=.*[a-z])[0-9a-z-]{17}$

На мой взгляд, это всегда безопаснее использовать опцию Ignorecase, чтобы избежать такой проблемы и сократить регулярное выражение.

127
ответ дан user2314737 21 August 2018 в 11:59
поделиться

Вы разрешаете A-z (капитал «A» через нижний «z»). Вы не говорите, какой пакет регулярных выражений вы используете, но не обязательно ясно, что A-Z и a-z смежны; между ними могут быть другие символы. Попробуйте это вместо:

^(?=.*[0-9])(?=.*[A-Za-z])[0-9A-Za-z-]{17}$

Кажется, что я отвечаю вашим критериям для меня в regexpal.

5
ответ дан Marc Fraioli 21 August 2018 в 11:59
поделиться

regex использует ASCII печатные символы из пробела в диапазон тильдов.

Всякий раз, когда мы используем маркер [A-z], он соответствует следующей таблице выделенных символов. Если мы используем маркер [ -~], он соответствует начиная с SPACE до тильды.

15
ответ дан Premraj 21 August 2018 в 11:59
поделиться
Другие вопросы по тегам:

Похожие вопросы: