Question

Je suis un peu nouveau en Perl, je voulais savoir s'il existe un moyen de générer toutes les combinaisons correspondant à une regex.

quelle est la meilleure façon de générer toutes les chaînes correspondantes pour :

05[0,2,4,7][\d]{7}

Merci d'avance.

Était-ce utile?

La solution

Non, il n'y a aucun moyen de générer tous les matchs pour une certaine regex.Considérez celui-ci:

a+

Il existe un nombre infini de correspondances pour cette regex, vous ne pouvez donc pas les énumérer tous.

Au fait, je pense que vous voulez que votre regex ressemble à ceci:

05[0247]\d{7}

Autres conseils

Bien que vous ne puissiez pas simplement prendre n'importe quelle expression régulière et produire toutes les chaînes qui lui conviennent, dans ce cas, vous pouvez facilement vous adapter et surmonter.

Vous pouvez utiliser glob pour générer des combinaisons :

perl -lwe "print for glob '05{0,2,4,7}'"
050
052
054
057

Cependant, je ne devrais pas avoir à vous le dire \d{7} cela signifie en fait quelques millions de combinaisons, n'est-ce pas ?Générer une liste de nombres est trivial, leur formatage peut être effectué avec sprintf:

my @nums = map sprintf("%07d", $_), 0 .. 9_999_999;

Cela suppose que vous recherchez uniquement des chiffres de 0 à 9.

Prenez ces chiffres et combinez-les avec ceux globaux :Tada.

Réponse 2012

Puis là est un moyen de générer toutes (quatre milliards) les correspondances pour cette certaine regex, à savoir, 05[0247]\d{7}:

use Modern::Perl;

for my $x (qw{0 2 4 7}) {
    say "05$x" . sprintf '%07d', $_ for 0 .. 9999999;
}
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top