Faire correspondre du texte multiligne avec des expressions régulières
La correspondance de texte multiligne nécessite souvent la gestion des sauts de ligne et de l'ancrage. Lorsque vous utilisez la classe Pattern de Java, deux modificateurs peuvent vous aider : Pattern.MULTILINE et String.matches(). Cependant, il peut y avoir une confusion entre leur utilisation.
Pattern.MULTILINE vs. (?m)
Pattern.MULTILINE et (?m) servent tous deux le même objectif. : permettant à ^ et $ de correspondre au début et à la fin de chaque ligne, plutôt qu'au début et à la fin de l'ensemble string.
String.matches() vs Pattern.matcher()
String.matches() s'attend à ce que l'expression régulière corresponde à la chaîne entière. Cela signifie que son utilisation peut être limitée lorsqu'il s'agit de texte multiligne.
Résoudre l'exemple
Dans l'exemple fourni, (?m) est utilisé avec String.matches( ), c’est là que réside le problème. Étant donné que l'expression régulière ne capture qu'une partie du texte multiligne, String.matches() ne parvient pas à faire correspondre la chaîne entière et renvoie false.
Utilisation appropriée pour la correspondance multiligne
Pour faire correspondre correctement le texte multiligne, vous devez utiliser Pattern.compile() avec le modificateur Pattern.DOTALL, qui permet au point (.) de correspondre aux caractères de nouvelle ligne. Voici une version mise à jour du code :
String test = "User Comments: This is \t a\ta \n test \n\n message \n"; String pattern = "^\s*User Comments:\s*(.*)"; Pattern regex = Pattern.compile(pattern, Pattern.DOTALL); Matcher regexMatcher = regex.matcher(test); if (regexMatcher.find()) { String result = regexMatcher.group(1); }
Ce code capturera avec succès le texte après « Commentaires de l'utilisateur : » sur plusieurs lignes.
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!