Comprendre l'écart dans String.matches()
Lorsque vous essayez de valider des chaînes à l'aide d'expressions régulières en Java, vous pouvez rencontrer un comportement inattendu avec la méthode String.matches(). Bien que l'intention de cette méthode implique de faire correspondre une sous-chaîne dans une chaîne, elle tente en fait de faire correspondre la chaîne entière à l'expression régulière fournie.
Considérez l'extrait de code suivant :
String[] words = {"{apf","hum_","dkoe","12f"}; for(String s:words) { if(s.matches("[a-z]")) { System.out.println(s); } }
Comme vous l'avez remarqué, ce code ne parvient pas à imprimer le résultat attendu ("dkoe") car il ne correspond pas à la sous-chaîne souhaitée mais vérifie plutôt si la chaîne entière ne contient que des minuscules lettres.
La solution : utiliser Pattern et Matcher
Pour résoudre ce problème, vous devez utiliser les classes Pattern et Matcher avec la méthode .find() pour déterminer si une expression régulière correspond à une sous-chaîne dans le texte d'entrée. Cette approche implique les étapes suivantes :
Voici un exemple :
Pattern p = Pattern.compile("[a-z]"); Matcher m = p.matcher(inputstring); if (m.find()) // match found
Si vous souhaitez vous assurer que l'entrée ne contient que des lettres minuscules, vous pouvez utiliser l'expression régulière suivante : ^[a-z] $. N'oubliez pas d'utiliser .find() au lieu de .matches().
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!