Java 21 regex boundary matcher matchter unicode изменениеJAVA

Программисты JAVA общаются здесь
Ответить
Anonymous
 Java 21 regex boundary matcher matchter unicode изменение

Сообщение Anonymous »

Я заметил, что семантика сочетания Word-Boundary regex regex \ b значительно изменилась с Java 21. До (по крайней мере) Java 17 он использовал для поддержки Unicode, так что regex a \ b. * не соответствовал строке "aß" .
Очевидно, с Java 21 теперь определяется в терминах класса символов \ w , который по умолчанию не с поддержкой юникода. Так что теперь a \ b.* внезапно соответствует "aß" . Единственный способ, которым я могу видеть «исправить» \ b ,-это включить флаг Unicode_character_class , но, конечно, изменяется все классы символов, что также отличается от поведения до Java-21. < /p>
Странно, я не могу найти никакой информации об этом нарушительном изменении. Ничто в выпуске Java 21, и различные попытки Google не дали ничего полезного. Для таких нарушающих изменений основных основных либеров я, по крайней мере, ожидал бы большого жира, а также флага функции для повторного определения старого поведения . Кто -нибудь что -нибудь знает об этом? < /P>
mwe: < /p>

Код: Выделить всё

echo 'System.out.println("aß".matches("a\\b.*"))' | /usr/lib/jvm/java-17-openjdk/bin/jshell
-> false
vs.

Код: Выделить всё

echo 'System.out.println("aß".matches("a\\b.*"))' | /usr/lib/jvm/java-21-openjdk/bin/jshell -q
-> true

Подробнее здесь: https://stackoverflow.com/questions/794 ... ode-change
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «JAVA»