Ошибка при использовании FileUtils

Я использую FileUtils из apache commons.io для поиска текста между двумя строками в файле со следующим кодом:

Pattern p = Pattern.compile(Pattern.quote(fromDate) + "(.*?)" + Pattern.quote(toDate));

try {
    Matcher m = p.matcher(fileContent);                  
    while (m.find()) {
        System.out.println(m.group(1));

Но есть ошибка: он выдает выходные данные только тогда, когда обе строки лежат в одной строке, но не выводит, если строки находятся в разных строках? Здесь я беру содержимое всего файла в Sting Varibale "fileContent".

2 ответа

Точка не будет искать по нескольким строкам. Вам нужно дать второй параметр для этого Pattern.DOTALL вот так:Pattern p = Pattern.compile(Pattern.quote(fromDate) + "(.*?)" + Pattern.quote(toDate), Pattern.DOTALL);

Также в этих темах есть хорошее объяснение, как это работает: сопоставлять многострочный текст с помощью регулярных выражений.

Попробуйте завершить регулярное выражение с помощью?s, чтобы у вас появилось новое регулярное выражение: "(.*?s)"

В большинстве случаев совпадение прекращает вычислять выражение, когда встречает перевод строки \n.?s заставляет matcher передавать \n, когда он пытается соответствовать регулярному выражению.

Другие вопросы по тегам