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
Libérer: 2024-12-10 11:30:10
original
187 Les gens l'ont consulté

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
Copier après la connexion

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
Copier après la connexion

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
Copier après la connexion

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);
}
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal