2009-08-25 9 views
0

caractère alternatif/séquentielle je me expression régulière en java qui correspond au schéma suivant:regex: numérique

  1. deux valeurs numériques ou alpha alternatif Exemple: 12121212 ou adadadad

  2. numérique ou alpha séquences ayant au moins 4 chiffres séquentiels Exemple: CDEFGH ou 123456

grâce

Répondre

0

Les Regex ne sont pas conçus pour analyser ces variétés de motifs. Cependant, vous pourriez être en mesure de contourner cela un peu, même si c'est désordonné.

Le second pourrait être forcé brute pour exactement quatre Sequentials assez facilement:

(abcd|bcde|cdef|...|wxyz|0123|1234|...|6789) 

Mais qu'en aucun cas couvre 5 Sequentials et plus. Ce serait méchant. Vous pouvez faire quelque chose de similaire pour le premier cas, bien que ce soit un peu plus déraisonnable, car il y a 26 lettres + 10 chiffres (je suppose que vous faites cela en minuscules), donc si vous vouliez tout alterner paires dont vous auriez besoin 36 * 35 = 1260 possibilités dans votre regex. Ce qui est un peu long. Il pourrait être fait, mais ce n'est pas souhaitable.

Votre exemple pourrait bien sûr être analysé comme suit:

(12|ab)+ 

Ce qui est raisonnable. Mais si vous cherchez la solution la plus générique pour tout appariement de nombres/alphabets, vous devez générer la liste de façon exhaustive. En conclusion, le mieux est de ne PAS utiliser d'expressions régulières. Ils ne sont pas conçus pour être utilisés pour ce genre de recherches.

+0

Votre brute force regex gère "exactement quatre" mais pas "au moins quatre" caractères séquentiels, donc la solution complète serait encore plus en désordre. –

+0

Oh, haha, je pensais que ça voulait dire au moins quatre suivis de quoi que ce soit. Oui vous avez raison. –

2

Je pense qu'une regex est probablement le mauvais outil pour le modèle 2. "tout numérique" ou "tout alpha" est facile, mais l'exigence "séquentielle" va être difficile à exprimer. Vous êtes probablement mieux d'écrire une simple boucle pour vérifier vos besoins.

+0

Pourquoi la downvote? Si vous avez une meilleure idée, voyons-le! –

+0

S'il y a un problème avec cette réponse, c'est le mot * probablement *. Cela peut être possible dans Perl, qui vous permet d'inclure du code exécutable dans une regex, mais pas en Java. Et cela vaut pour les deux exigences, pas seulement la deuxième. –

0

Pour la première, si vous avez un ensemble SIGMA qui est votre alphabet, vous pouvez le faire:

(SIGMA SIGMA) +

Cela ne permet aaaaaa, mais je ne suis pas sûr que ce soit