Я пытаюсь интерпретировать многострочную строку с помощью RegEx и просто обнаружил, что сопоставление не будет выполнено, если строка содержит символы новой строки. Я НЕ использую режим MULTILINE
, потому что я не использую якоря. Согласно документам API:
В многострочном режиме выражения ^
и $ match сразу после или сразу перед
соответственно, терминатор строки или
конец последовательности ввода. По умолчанию
эти выражения совпадают только на
начало и конец всего
последовательность ввода.
Короче говоря: он ясно говорит, что этот флаг только меняет работу якорей, и ничего не говорит, например, "когда ваша строка содержит новую строку, вы обязательно должны использовать это" .
public static void main(String[] args) {
Pattern p = Pattern.compile(".*");
Matcher m1 = p.matcher("Hello");
System.out.println("m1: " + m1.matches()); // true
Matcher m2 = p.matcher("Hello\r\n");
System.out.println("m2: " + m2.matches()); // false
}
Так это действительно ошибка, или я просто пропустил некоторые документы? Или JAVA использует диалект RegEx, где мой шаблон не работает? Я пользуюсь jdk1.6.0_21
.