Il n'y a pas de syntaxe spécifique pour cela, mais il y a beaucoup de façons de le faire :
(?:\d{4}|\d{2}) <-- alternance : quatre chiffres si possible, sinon juste deux
\d{2}(?:\d{2})? <-- deux chiffres, plus deux de plus si possible
(?:\d{2}){1,2} <-- deux chiffres, une ou deux fois
Donc, par exemple, pour faire correspondre des chaînes composées d'une ou plusieurs lettres A–Z suivies de deux ou quatre chiffres, vous pourriez écrire ^[A-Z]+(?:\d{4}|\d{2})$
; et pour faire correspondre une liste de nombres de deux ou quatre chiffres séparés par des virgules, vous pourriez écrire ^((?:\d{4},|\d{2},)*(?:\d{4}|\d{2})$
ou ^(?:\d{2}(?:\d{2})?,)*\d{2}(?:\d{2})$
.
1 votes
Par exemple, pour correspondre à une année de deux ou quatre chiffres.
0 votes
Que voulez-vous qu'il se passe si la chaîne est
abc 123 xyz
? Doit-elle correspondre à12
car il s'agit exactement de deux chiffres en séquence? Ou ne devrait-elle pas correspondre, car12
fait partie d'une séquence de chiffres plus grande123
qui elle-même n'est ni de longueur 2 ni de longueur 4? Si je devais deviner, je pense que vous voulez le dernier comportement, mais ce n'est pas clair dans votre question. Des exemples et/ou une spécification plus claire seraient utiles. Même question pourabc 12345 def
... qu'est-ce qu'il devrait se passer là?