Maison >Java >javaDidacticiel >Comment faire correspondre correctement le texte multiligne avec les expressions régulières Java ?

Comment faire correspondre correctement le texte multiligne avec les expressions régulières Java ?

Mary-Kate Olsen
Mary-Kate Olsenoriginal
2024-12-09 18:01:15299parcourir

How to Correctly Match Multiline Text with Java Regular Expressions?

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn