Я пытаюсь использовать следующий шаблон:
Pattern p = Pattern.compile("^(\\d+)$");
Странно, ИМХО:
p.matcher("123\n").find() == true;
p.matcher("123\n").lookingAt() == true; // also weird
p.matcher("123\n\n").find() == false; // ok
p.matcher("123\na").find() == false; // also ok
p.matcher("123\n").matches() == false; // ok to me
Цитирование документации для "многострочного флага" из Javadocs:
Включает многострочный режим.В многострочном режиме выражения ^ и $ совпадают сразу после или непосредственно перед, соответственно, разделителем строки или концом входной последовательности.По умолчанию эти выражения совпадают только в начале и в конце всей входной последовательности.
Ну, для меня '\ n' (то есть символ новой строки) не является концом входной последовательностипоэтому «$» должно соответствовать ему только в многострочном режиме.
Я что-то упустил или это ошибка в Java.Кроме того, если вы попробуете тот же шаблон и тестовые строки в Javascript, вы увидите, что Javascript ведет себя правильно:
/^(\d+)$/.test("123\n") == false
/^(\d+)$/.exec("123\n") == null
(кстати, я использую Java 8, на RHEL 7.2)
Спасибо!