J'utilise java 1.7.
Je pense que:
Pattern yyyymmddPattern = Pattern.compile("(\\d{4}[- /.]\\d{1,2}[- /.]\\d{1,2})");
doit correspondre aux chaînes avec au moins 2 occurrences de séparateurs - /. Mais, les éléments suivants correspondent
07 2.3180, 45 3.3183, 19 4.3183, 77 5.3025, 25 6.3023.
De plus, 9507 2.31 correspond à
Pattern ddmmyyyyPattern = Pattern.compile("(\\d{1,2}[- /.]\\d{1,2}[- /.]\\d{4})");
S'il vous plaît, aidez-moi à rectifier le modèle !
3 Réponses :
Cela s'est produit parce que la classe de caractères correspond également à un espace.
Vous pouvez utiliser un groupe de capture avec une référence arrière pour faire correspondre une date comme . Notez que cela ne valide pas une date elle-même.
String regex = "\\d{1,2}([-/.])\\d{1,2}\\1\\d{4}";
À propos du modèle
\ d {1,2} Correspond à 1 ou 2 chiffres ([- /.]) Capture dans un groupe correspondant à - / ou. \ d {1,2} Correspond à 1 ou 2 chiffres \ 1 Backreference à ce qui est capturé dans le groupe 1 (donc 12 / 12-2019 ne correspondra pas) \ d {4} Faire correspondre 4 chiffres En Java:
\d{1,2}([-/.])\d{1,2}\1\d{4}
Notez que pour une correspondance, vous pouvez omettre les parenthèses extérieures. p >
Vous devez supprimer l'espace de la classe de caractères
\\d{1,2}[-/.]\\d{1,2}[-/.]\\d{4}
changer pour ceci
\\d{1,2}[- /.]\\d{1,2}[- /.]\\d{4}
^ ^
Essayez ce modèle:
\d{1,2}([-\/.])\d{1,2}([-\/.])\d{4}
Bien sûr, l'espace vide doit être supprimé de l'expression régulière et le caractère "/" doit être précédé d'une barre oblique inverse pour être reconnu.
faire correspondre un modèle n'est pas comme faire une vérification d'égalité: il peut y avoir plusieurs valeurs qui correspondent au modèle