Ceci est une question regex vraiment basique mais comme je n'arrive pas à comprendre pourquoi la correspondance échoue dans certaines circonstances, je me suis dit que je la posterais pour voir si quelqu'un d'autre peut signaler ce qui me manque.Pourquoi mon regex échoue lorsque le nombre se termine par 0?
Je suis en train de sortir les 2 séries de chiffres à partir de chaînes de la forme:
12309123098_102938120938120938
1321312_103810312032123
123123123_10983094854905490
38293827_1293120938129308
J'utilise le code suivant pour traiter chaque chaîne:
if($string && $string =~ /^(\d)+_(\d)+$/) {
if(IsInteger($1) && IsInteger($2)) { print "success ('$1','$2')"; }
else { print "fail"; }
}
Lorsque la fonction IsInterger() est la suivante:
sub IsInteger {
my $integer = shift;
if($integer && $integer =~ /^\d+$/) { return 1; }
return;
}
Cette fonction semble fonctionner la plupart du temps, mais échoue sur le followi ng pour une raison quelconque:
1287123437_1268098784380
1287123437_1267589971660
Avez-vous des idées sur les raisons pour lesquelles ces solutions échouent alors que d'autres réussissent? Merci d'avance pour votre aide!
pour quoi avez besoin fonction EstEntier vous? Votre première regex ne mettra qu'une séquence de chiffres à '$ 1' et '$ 2' pas besoin de tester cela. Remplacez tout le 'if' avec' if ($ string = ~/^ (\ d +) _ (\ d +) /) {print "succès ('$ 1', '$ 2')"; } else {print "échec"; } ' – ZyX
Et pourquoi écrivez-vous' if ($ string) '? Tu n'as pas besoin de ça. – ZyX
@ZyZ - bon point. Je suis allé de l'avant et mettre à jour la fonction. –