Maison >Java >javaDidacticiel >Comment puis-je faire correspondre correctement un texte multiligne à l'aide d'expressions régulières Java ?

Comment puis-je faire correspondre correctement un texte multiligne à l'aide d'expressions régulières Java ?

Barbara Streisand
Barbara Streisandoriginal
2024-12-10 11:30:10200parcourir

How Can I Correctly Match Multiline Text Using Java Regular Expressions?

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!

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