12
votes

Expression régulière pour correspondre à une séquence numérique?

Est-ce que quelqu'un connaît une expression régulière pour correspondre à une séquence de quatre chiffres? J'ai besoin d'un match sur Ascending (1234), descendant (4321), ou le même (1111). Cela serait strictement ascendant / descendant; 1357 ne devrait pas correspondre.


2 commentaires

Regex n'est pas la meilleure méthode pour résoudre ce problème.


Est-ce que 1357 compte comme une correspondance ascendante? Qu'en est-il de 1289 ? Est 0 avant 1 ou après 9 ?


3 Réponses :


35
votes

correspond à un numéro à 4 chiffres constitué du même chiffre: xxx pré>

ou si vous préférez la capture d'assertion: p>

^          : (starting from beginning)
(?=\d{4}$) : (assert there are 4 digits to end)
(?:        : (must then match any of these three in a non-capturing group)
   (.)\1*                : all same digit
|  0?1?2?3?4?5?6?7?8?9?  : strictly increasing
|  9?8?7?6?5?4?3?2?1?0?  : strictly decreasing
)$ : (to end)


3 commentaires

C'est un bon travail. Merci d'avoir enfreint l'expression avec des commentaires.


Comment utiliser la logique similaire pour les alphabets tels que je souhaite vérifier une chaîne y a-t-il strictement croissant / décroissant alphabets? Par exemple ABCD, GHIJ, MNOP, POMN, etc.


Votre réponse devrait travailler pour moi mais je ne sais pas pourquoi cela ne renvoie rien lorsqu'il est appliqué sur 111110123456333399876.



8
votes

ici c'est: xxx


1 commentaires

MDR. Je suppose que je le faisais plus compliqué que j'avais besoin.



10
votes
public static boolean isDigitAscendingSequence(String ssn) {
    return "0123456789".contains(ssn);
}
The same logic with descending sequences

1 commentaires

Et peut-être ajouter le zéro à la fin ainsi que le début.