РЕПЕТИТОР математика физика информатика
Для школьников и студентов. Подтягивание пробелов. ЦЭ, ЦТ, ОГЭ, ЕГЭ.
Идет набор на ЛЕТО. Жмите для подробностей:)
668 of 1163 menu

Поле UNICODE_CASE

Поле UNICODE_CASE класса Pattern представляет собой флаг регулярного выражения, который включает режим Unicode-совместимого сопоставления регистра. Когда этот флаг установлен, регистр символов учитывается в соответствии с правилами Unicode, а не только для символов латинского алфавита. Флаг особенно полезен в паре с флагом CASE_INSENSITIVE, поскольку сам по себе UNICODE_CASE не отключает чувствительность к регистру, а лишь расширяет её на весь диапазон Unicode. Значение поля равно 64 (в шестнадцатеричном виде 0x40).

Флаг передаётся вторым параметром в методы compile класса Pattern или устанавливается через битовую маску при создании шаблона. Без флага UNICODE_CASE сопоставление регистра выполняется только для символов ASCII, что может приводить к неверным результатам при работе с кириллицей, греческим, арабским и другими алфавитами.

Синтаксис

Pattern.compile(regex, Pattern.UNICODE_CASE) Pattern.compile(regex, Pattern.CASE_INSENSITIVE | Pattern.UNICODE_CASE)

Пример

Давайте сравним работу флага CASE_INSENSITIVE без флага UNICODE_CASE и вместе с ним на строке с кириллицей:

import java.util.regex.Pattern; import java.util.regex.Matcher; public class Main { public static void main(String[] args) { String regex = "привет"; String str = "ПРИВЕТ"; Pattern p1 = Pattern.compile(regex, Pattern.CASE_INSENSITIVE); Matcher m1 = p1.matcher(str); System.out.println(m1.find()); Pattern p2 = Pattern.compile(regex, Pattern.CASE_INSENSITIVE | Pattern.UNICODE_CASE); Matcher m2 = p2.matcher(str); System.out.println(m2.find()); } }

Результат выполнения кода:

false true

Пример

Давайте найдём все вхождения слова в разных регистрах кириллицы с использованием флага UNICODE_CASE:

import java.util.regex.Pattern; import java.util.regex.Matcher; public class Main { public static void main(String[] args) { String regex = "тест"; String str = "Тест ТЕСТ тест ТеСт"; Pattern p = Pattern.compile(regex, Pattern.CASE_INSENSITIVE | Pattern.UNICODE_CASE); Matcher m = p.matcher(str); while (m.find()) { System.out.println(m.group()); } } }

Результат выполнения кода:

"Тест" "ТЕСТ" "тест" "ТеСт"

Пример

Давайте проверим значение флага UNICODE_CASE и убедимся, что оно соответствует константе 64:

import java.util.regex.Pattern; public class Main { public static void main(String[] args) { System.out.println(Pattern.UNICODE_CASE); Pattern p = Pattern.compile("abc", Pattern.CASE_INSENSITIVE | Pattern.UNICODE_CASE); int flags = p.flags(); boolean enabled = (flags & Pattern.UNICODE_CASE) != 0; System.out.println(enabled); } }

Результат выполнения кода:

64 true

Смотрите также

  • поле CASE_INSENSITIVE,
    которое включает игнорирование регистра
  • поле UNICODE_CASE,
    которое расширяет игнорирование регистра на Unicode
  • метод compile,
    который компилирует регулярное выражение с флагами
  • метод flags,
    который возвращает флаги шаблона
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить