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

Поле MULTILINE

Поле MULTILINE класса Pattern представляет собой флаг регулярного выражения, который включает многострочный режим сопоставления. По умолчанию символ ^ соответствует началу всей входной строки, а символ $ - её концу. Если включить флаг MULTILINE, то ^ будет соответствовать началу каждой строки, а $ - концу каждой строки. Строки во входной последовательности разделяются символами перевода строки, а также символами возврата каретки и другими разделителями строк.

Флаг MULTILINE можно передать вторым параметром в метод compile класса Pattern, а также использовать внутри самого регулярного выражения с помощью конструкции (?m). Значением поля является целое число 8.

Синтаксис

Pattern.compile(regex, Pattern.MULTILINE)

Пример

Давайте сравним работу регулярного выражения без флага MULTILINE и с ним. Сначала найдём все вхождения шаблона ^a без флага:

import java.util.regex.Matcher; import java.util.regex.Pattern; public class Main { public static void main(String[] args) { String str = "abcde\nabcde\nabcde"; Pattern pattern = Pattern.compile("^a"); Matcher matcher = pattern.matcher(str); while (matcher.find()) { System.out.println(matcher.start()); } } }

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

0

Пример

Теперь включим флаг MULTILINE и найдём тот же шаблон ^a в той же строке:

import java.util.regex.Matcher; import java.util.regex.Pattern; public class Main { public static void main(String[] args) { String str = "abcde\nabcde\nabcde"; Pattern pattern = Pattern.compile("^a", Pattern.MULTILINE); Matcher matcher = pattern.matcher(str); while (matcher.find()) { System.out.println(matcher.start()); } } }

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

0 6 12

Пример

Аналогично работает символ $. Давайте найдём все вхождения шаблона e$ с включённым флагом MULTILINE:

import java.util.regex.Matcher; import java.util.regex.Pattern; public class Main { public static void main(String[] args) { String str = "abcde\nabcde\nabcde"; Pattern pattern = Pattern.compile("e$", Pattern.MULTILINE); Matcher matcher = pattern.matcher(str); while (matcher.find()) { System.out.println(matcher.start()); } } }

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

4 10 16

Пример

Флаг MULTILINE можно включить прямо внутри регулярного выражения с помощью конструкции (?m). Давайте сделаем то же самое, что и в предыдущем примере, но без второго параметра метода compile:

import java.util.regex.Matcher; import java.util.regex.Pattern; public class Main { public static void main(String[] args) { String str = "abcde\nabcde\nabcde"; Pattern pattern = Pattern.compile("(?m)^a"); Matcher matcher = pattern.matcher(str); while (matcher.find()) { System.out.println(matcher.start()); } } }

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

0 6 12

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

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