Maison > Java > javaDidacticiel > Comment `Pattern.MULTILINE` et `(?m)` diffèrent-ils lors de la correspondance de texte multiligne dans les expressions régulières Java ?

Comment `Pattern.MULTILINE` et `(?m)` diffèrent-ils lors de la correspondance de texte multiligne dans les expressions régulières Java ?

Patricia Arquette
Libérer: 2024-12-08 16:59:09
original
706 Les gens l'ont consulté

How Do `Pattern.MULTILINE` and `(?m)` Differ When Matching Multiline Text in 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 en Java, vous pouvez rencontrer des différences de comportement entre l'utilisation de la classe Pattern avec le modificateur Pattern.MULTILINE et en utilisant le modificateur (?m).

Pour comprendre l'écart, il est crucial de comprendre le but de ces modificateurs.

Pattern.MULTILINE et (?m)

Pattern.MULTILINE et (?m) sont utilisés pour étendre le comportement des ancres d'expression régulière ( ^ et $) pour correspondre non seulement au début et à la fin de la chaîne entière, mais également au début et à la fin de chaque ligne dans le string.

Pattern.DOTALL et (?s)

Cependant, la principale différence entre ces modificateurs réside dans la gestion des caractères de nouvelle ligne (retour chariot). Pattern.MULTILINE n'étend pas la capacité de correspondance du caractère générique point (.) pour inclure les caractères de nouvelle ligne. Pour les inclure, vous devez utiliser Pattern.DOTALL ou (?s).

Correspondance à l'exemple de chaîne

Dans votre exemple, la chaîne contient plusieurs lignes et vous souhaitez rechercher le texte commençant par « Commentaires de l'utilisateur : ». L'utilisation de Pattern.MULTILINE seule permettra aux ancres de correspondre au début de chaque ligne, mais le caractère point ne correspondra pas aux nouvelles lignes.

Pour faire correspondre correctement le texte multiligne et capturer les caractères après "Commentaires utilisateur :", vous devez utilisez Pattern.DOTALL ou (?s) en conjonction avec Pattern.MULTILINE ou (?m):

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

Cette expression régulière correspondra au début de chaque ligne et capturez tous les caractères autres que des espaces après « Commentaires de l'utilisateur : ».

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