Cela n'a rien à voir avec le drapeau MULTILINE ; ce que vous voyez, c'est la différence entre l'affichage de l'écran de l'ordinateur et celui de l'écran de l'ordinateur. find()
et matches()
méthodes. find()
réussit si une correspondance est trouvée n'importe où dans la chaîne cible alors que matches()
attend de la regex qu'elle corresponde à la chaîne entière .
Pattern p = Pattern.compile("xyz");
Matcher m = p.matcher("123xyzabc");
System.out.println(m.find()); // true
System.out.println(m.matches()); // false
Matcher m = p.matcher("xyz");
System.out.println(m.matches()); // true
En outre, MULTILINE
ne signifie pas ce que vous pensez. De nombreuses personnes semblent en conclure que vous devez utiliser ce drapeau si votre chaîne cible contient des nouvelles lignes, c'est-à-dire si elle contient plusieurs lignes logiques. J'ai vu plusieurs réponses à cet effet sur SO, mais en fait, ce drapeau ne fait que modifier le comportement des ancres, ^
et $
.
Normalement ^
correspond au tout début de la chaîne cible, et $
correspond à la toute fin (ou avant une nouvelle ligne à la fin, mais nous laisserons cela de côté pour l'instant). Mais si la chaîne de caractères contient des nouvelles lignes, vous pouvez choisir pour ^
et $
pour correspondre au début et à la fin de n'importe quelle ligne logique, et pas seulement au début et à la fin de la chaîne entière, en activant le drapeau MULTILINE.
Alors oublie ce que MULTILINE
signifie et souviens-toi juste de ce qu'il fait : modifie le comportement de la ^
et $
ancres. DOTALL
était à l'origine appelé "single-line" (et l'est toujours dans certaines versions, notamment Perl et .NET), et il a toujours suscité la même confusion. Nous avons de la chance que les développeurs de Java aient choisi le nom le plus descriptif dans ce cas, mais il n'y avait pas d'alternative raisonnable pour le mode "multiligne".
En Perl, où toute cette folie a commencé, ils ont admis leur erreur et se sont débarrassés des modes "multiline" et "single-line" dans les regex de Perl 6. Dans vingt ans, le reste du monde aura peut-être suivi le mouvement.