Поле CASE_INSENSITIVE
Поле CASE_INSENSITIVE класса Pattern представляет
собой флаг (константу типа int), который включает
режим регистронезависимого сопоставления. Когда этот флаг
установлен, регулярное выражение будет совпадать с текстом
без учёта регистра символов: например, шаблон "abc"
сможет найти как "abc", так и "ABC",
"AbC" и любые другие комбинации регистра. Флаг
передаётся вторым параметром в метод compile
класса Pattern. По умолчанию, без указания этого
флага, сопоставление выполняется с учётом регистра.
Помимо CASE_INSENSITIVE, в метод compile
можно передавать и другие флаги, объединяя их через
побитовое ИЛИ |.
Синтаксис
Pattern.compile(regex, Pattern.CASE_INSENSITIVE)
Пример
Давайте проверим, найдёт ли шаблон "abc" строку
"ABC" без флага CASE_INSENSITIVE:
import java.util.regex.Pattern;
import java.util.regex.Matcher;
public class Main
{
public static void main(String[] args)
{
Pattern pattern = Pattern.compile("abc");
Matcher matcher = pattern.matcher("ABC");
System.out.println(matcher.find());
}
}
Результат выполнения кода:
false
Пример
А теперь добавим флаг CASE_INSENSITIVE и снова
проверим сопоставление:
import java.util.regex.Pattern;
import java.util.regex.Matcher;
public class Main
{
public static void main(String[] args)
{
Pattern pattern = Pattern.compile("abc", Pattern.CASE_INSENSITIVE);
Matcher matcher = pattern.matcher("ABC");
System.out.println(matcher.find());
}
}
Результат выполнения кода:
true
Пример
Флаг можно комбинировать с другими флагами через
побитовое ИЛИ. Давайте объединим
CASE_INSENSITIVE и UNICODE_CASE
для корректной регистронезависимой работы
с Unicode-символами:
import java.util.regex.Pattern;
import java.util.regex.Matcher;
public class Main
{
public static void main(String[] args)
{
int flags = Pattern.CASE_INSENSITIVE | Pattern.UNICODE_CASE;
Pattern pattern = Pattern.compile("привет", flags);
Matcher matcher = pattern.matcher("ПРИВЕТ");
System.out.println(matcher.find());
}
}
Результат выполнения кода:
true
Пример
Также флаг можно указать прямо внутри регулярного
выражения с помощью конструкции (?i). Давайте
посмотрим, как это работает при замене текста:
public class Main
{
public static void main(String[] args)
{
String str = "abcde ABCDE";
String res = str.replaceAll("(?i)abc", "X");
System.out.println(res);
}
}
Результат выполнения кода:
"Xde XDE"
Смотрите также
-
класс
Pattern,
который представляет скомпилированное регулярное выражение -
метод
compile,
который компилирует регулярное выражение с флагами -
поле
UNICODE_CASE,
которое включает Unicode-совместимый регистр -
метод
matches,
который проверяет соответствие строки шаблону