Возможно, у вас есть символы возврата каретки ('\r'
) перед символами новой строки ('\n'
) в вашем searchableText
. Это может привести к сбою сопоставления на границах строк.
Чтобы сделать ваш многострочный шаблон более надежным, попробуйте использовать опцию MULTILINE при компиляции регулярного выражения. Затем используйте ^
и $
по мере необходимости, чтобы соответствовать границам линий.
Pattern pattern = Pattern.compile(regex, Pattern.MULTILINE);
Обновление:
После того, как мы на самом деле протестировали ваш код, я вижу, что шаблон соответствует наличию возврата каретки или нет. Другими словами, ваш код «работает» как есть, и topicTitleFound
равен true
при первом назначении (вне цикла while
).
Вы уверены, что получаете false
за topicTitleFound
? Или проблема в цикле?
Кстати, использование indexOf()
расточительно и неудобно, так как средство сопоставления уже хранит индекс, с которого начинается группа 0. Используйте это вместо:
int i = matcher.start(0);