1
votes

Pourquoi une chaîne différente correspond au modèle?

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 !


1 commentaires

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


3 Réponses :


4
votes

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}

Démo Regex | Démo Java

Notez que pour une correspondance, vous pouvez omettre les parenthèses extérieures. p >


0 commentaires

2
votes

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}
           ^             ^ 


0 commentaires

1
votes

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.


0 commentaires