Faire correspondre un texte multiligne à l'aide d'une expression régulière
Lorsque vous essayez de faire correspondre un texte multiligne avec Java, vous pouvez rencontrer des difficultés en utilisant le modificateur Pattern.MULTILINE et l'expression (?m). Voici un exemple qui explique la différence et apporte une solution :
Nous avons le texte multiligne suivant :
User Comments: This is \t a\ta \n test \n\n message \n
Motif avec modificateur Pattern.MULTILINE :
String pattern1 = "User Comments: (\W)*(\S)*"; Pattern p = Pattern.compile(pattern1, Pattern.MULTILINE); System.out.println(p.matcher(test).find()); // true
Ce modèle correspond avec succès au texte car le modificateur Pattern.MULTILINE permet aux ancres ^ et $ de correspondre au début et à la fin de chaque ligne.
Modèle avec (?m) Expression :
String pattern2 = "(?m)User Comments: (\W)*(\S)*"; System.out.println(test.matches(pattern2)); // false
Ce modèle ne correspond pas car l'expression (?m) est incorrecte. Il doit être (?s) pour activer le mode DOTALL, qui permet au point (.) de correspondre aux caractères de nouvelle ligne.
De plus, la méthode matches() est utilisée pour vérifier si la chaîne entière correspond au modèle. Dans ce cas, le modèle ne correspond qu'à une partie de la chaîne, donc matches() renvoie false.
Solution :
Pour faire correspondre correctement le texte multiligne à l'aide d'une expression régulière , vous pouvez utiliser le modèle suivant avec le modificateur Pattern.DOTALL :
Pattern regex = Pattern.compile("^\s*User Comments:\s+(.*)", Pattern.DOTALL); Matcher regexMatcher = regex.matcher(subjectString); if (regexMatcher.find()) { ResultString = regexMatcher.group(1); }
Ce modèle capturera le texte après "Commentaires utilisateur :" et le stockera dans Chaîne de résultats.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!