Поле 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,
которое включает режим игнорирования регистра