2015-11-25 2 views
0

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

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».

ответ

0

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

Кроме того, это темы имеет хорошие объяснения, как это работает: Match multiline text using regular expression

+0

Я думал использовать этот флаг, но теперь (? S) решил мою проблему. Благодаря! – iymrahul

0

попытаться положить конец регулярное выражение с s, так что вы новый регулярное выражение должно быть: "(. *? s)"

В большинстве случаев совпадение перестает оценивать выражение, когда оно встречается с линией \ n. ? S make matcher передает \ n, когда он пытается совместить регулярное выражение.

+0

Я также пробовал с этим «(? S)», и он работает правильно. В любом случае спасибо за ваше предложение – iymrahul

Смежные вопросы