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