Ошибка при использовании 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, когда он пытается соответствовать регулярному выражению.