Скорее всего, из-за JDK-6609854 и JDK-8189343, который сообщил об отрицательной вложенной обработке классов символов (в Вашем примере [^[0-9-]]
). Это поведение было зафиксировано в 9 и 10, но фиксация не была бэкпортирована к 8. Ошибка для Java 8 объяснена как:
В Java, отрицание делает не , относятся к чему-либо появляющемуся во вложенном
[brackets]
, Таким образом
[^c]
не соответствует "c", как Вы ожидали бы.
[^[c]]
действительно соответствует "c". Не, что я ожидал бы.
[[^c]]
не соответствует "c", то же сохраняется для диапазонов или выражений свойства - если они - внутренние скобки, отрицание в, уровень не влияет на них.
[^a-z]
противоположно от[^[a-z]]