2015-11-25 1 views
0

J'utilise FileUtils de apache commons.io pour rechercher du texte entre deux chaînes de caractères dans un fichier avec le code suivant:Erreur lors de l'utilisation 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)); 

Mais il y a une erreur, il donne la sortie seulement lorsque le les chaînes se trouvent dans la même ligne, pas de sortie si les chaînes sont sur des lignes différentes? Ici, je prends le contenu de l'ensemble du fichier dans un Sting Varibale "fileContent".

Répondre

0

Le point ne recherche pas sur plusieurs lignes. Vous devez donner un second paramètre pour cette Pattern.DOTALL comme ceci: Pattern p = Pattern.compile(Pattern.quote(fromDate) + "(.*?)" + Pattern.quote(toDate), Pattern.DOTALL);

aussi ce sujets a une bonne explication comment cela fonctionne: Match multiline text using regular expression

+0

Je pensais utiliser ce drapeau mais maintenant (? S) a résolu mon problème. Merci! – iymrahul

0

essayer la fin de la regex avec de sorte que vous nouveau regex devriez être: "(. *? s)"

Dans la plupart des cas, l'analyseur s'arrête d'évaluer l'expression lorsqu'il rencontre un saut de ligne \ n. ? S fait passer le matcher le \ n quand il essaie de faire correspondre l'expression rationnelle.

+0

J'ai également essayé avec ce "(? S)" et il fonctionne correctement. En tout cas merci pour votre suggestion – iymrahul