По умолчанию .
соответствует любому символу, кроме символов новой строки (\n
), но вы можете использовать флаг Pattern.DOTALL
, чтобы он соответствовал символам новой строки.Так, например, вместо этого:
final Pattern pat = Pattern.compile("// Co\r?\n(.*)\r?\n// Co");
вы бы использовали это:
final Pattern pat = Pattern.compile("// Co\r?\n(.*)\r?\n// Co", Pattern.DOTALL);
Эквивалентно, вы можете установить флаг s
внутри самого регулярного выражения, используя любой изэти стили:
final Pattern pat = Pattern.compile("// Co\r?\n((?s).*)\r?\n// Co");
final Pattern pat = Pattern.compile("// Co\r?\n(?s:(.*))\r?\n// Co");
, который позволяет вам точно контролировать, какая часть регулярного выражения принимает новую строку для .
.(Но я бы придерживался подхода DOTALL
, если у вас нет регулярного выражения, где .
иногда означает одно, иногда другое.)
Отредактировано, чтобы добавить: Кажетсявесьма вероятно - но вам придется определить это для себя, исходя из вашего варианта использования - что вам нужно использовать нежадное количественное определение, .*?
, а не жадное количественная оценка, .*
.