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

Поле DOTALL

Поле DOTALL класса Pattern представляет собой флаг регулярного выражения, который включает режим «точка соответствует всему». По умолчанию метасимвол точки . в регулярных выражениях Java совпадает с любым символом, кроме символов перевода строки (\n, \r и других терминаторов строк). Когда флаг DOTALL установлен, точка начинает совпадать и с этими символами тоже.

Поле имеет тип int и хранит битовую маску значения 32. Его можно передать вторым параметром в метод compile класса Pattern, а также использовать во флагах, встроенных прямо в регулярное выражение, например (?s).

Синтаксис

Pattern.compile(regex, Pattern.DOTALL)

Либо через встроенный флаг внутри самого выражения:

(?s)regex

Пример

Давайте сравним поведение точки без флага и с флагом DOTALL. Сначала попробуем найти подстроку, начинающуюся на a и заканчивающуюся на c, между которыми стоит любой символ:

import java.util.regex.Pattern; import java.util.regex.Matcher; public class Main { public static void main(String[] args) { String str = "a\nc"; Pattern p = Pattern.compile("a.c"); Matcher m = p.matcher(str); System.out.println(m.find()); } }

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

false

Пример

Теперь добавим флаг DOTALL и повторим поиск:

import java.util.regex.Pattern; import java.util.regex.Matcher; public class Main { public static void main(String[] args) { String str = "a\nc"; Pattern p = Pattern.compile("a.c", Pattern.DOTALL); Matcher m = p.matcher(str); System.out.println(m.find()); } }

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

true

Пример

Того же эффекта можно добиться встроенным флагом (?s) прямо в регулярном выражении:

import java.util.regex.Pattern; import java.util.regex.Matcher; public class Main { public static void main(String[] args) { String str = "a\nc"; Pattern p = Pattern.compile("(?s)a.c"); Matcher m = p.matcher(str); System.out.println(m.find()); } }

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

true

Пример

Давайте найдём все многострочные блоки между открывающей и закрывающей фигурными скобками в многострочной строке:

import java.util.regex.Pattern; import java.util.regex.Matcher; public class Main { public static void main(String[] args) { String str = "{abc\ndef}\n{123\n45}"; Pattern p = Pattern.compile("\\{.*?\\}", Pattern.DOTALL); Matcher m = p.matcher(str); while (m.find()) { System.out.println(m.group()); } } }

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

"{abc def}" "{123 45}"

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

  • класс Pattern,
    который представляет скомпилированное регулярное выражение
  • метод compile,
    который компилирует регулярное выражение с флагами
  • метод matcher,
    который создает сопоставитель для строки
  • поле MULTILINE,
    которое меняет поведение якорей ^ и $
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить