rechercher un nombre avec une expression régulière

bfabrice64
Invité n'ayant pas de compte PHPfrance

12 févr. 2011, 13:28

Bonjour,

pourriez vous m'aider à trouver la bonne expression régulière qui permette de rechercher dans un fichier tous les nombres de 10 chiffres qui commencent par 0302
Voilà ce que j'ai en stock pour l'instant:

le bur c'est de les extraire du fichier et de les transferer ver s un fichier texte.

$page="monfichier_qui_vient_dun_formulaire";
$nombre = eregi("^0302[0-9-]{10,10}",$page,$regs);

echo $regs[1];

fclose($fp);



et ça marche pas...

merci pour les conseils...

bfabrice

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

12 févr. 2011, 13:41

Le 0302 est-il inclut dans les dix chiffres ou bien est-ce un nombre à 14 chiffres ?

A noter que le ^ dans un masque d'expression régulière correspond au début de la chaine que tu traites, donc si ta variable $page ne commence pas par 0302, mais que cette chaine se trouve au milieu, elle ne correspondra pas à ton masque.
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

bfabrice
Invité n'ayant pas de compte PHPfrance

12 févr. 2011, 13:48

oui le 0302 est inclus, cad que je cherche des chaines de type 030254687 bla bla bla 0302689787 bla bla bla
et non la chaine ne commence pas par 0302 mais par bla bla bla ...


j'aimerais trier ces nombres et les récuperer dans un fichier ( mais ça je peux faire ) genre 0302546987;0302778899;etc,

Merci


bfabrice

ViPHP
xTG
ViPHP | 7331 Messages

12 févr. 2011, 13:51

Dans ce cas il te faut bien enlever le ^ car ton nombre ne se trouve pas forcement en début de chaîne. :)

bfabrice
Invité n'ayant pas de compte PHPfrance

12 févr. 2011, 13:55

Ca marche toujousr pas avec :

$page="monfichier_qui_vient_dun_formulaire";
$nombre = eregi("0302[0-9-]{10,10}",$page,$regs);

echo $regs[1];


et je vois pas d'ou ça peut venir , est ce que ma formule est bonne?

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

12 févr. 2011, 14:02

Ton deuxième problème à lié à ton {10,10} qui s'applique uniquement à l'expression qui le précède, c'est à dire au [0-9-]. il cherche donc une chaine de 14 caractères (les 4 premiers 0302, puis 10 caractères de 0 à 9 ou "-") :)
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

bfabrice
Invité n'ayant pas de compte PHPfrance

12 févr. 2011, 14:20

merci mais j'ai essayé avec

$page="monfichier_qui_vient_dun_formulaire";
$nombre = eregi("0302[0-9-]{6,6}",$page,$regs);

echo $regs[1];

et ça marche toujours pas...

Est ce que c'est lié aux nombres qui peuvent être espacés ( 0 2 0 3 6 6 6 6 6 6) ?

merci

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

12 févr. 2011, 15:09

C'est effectivement lié :)

Ton masque doit représenter précisément la chaine que tu recherches... donc s'il y a des espaces dans ta chaine mais que ton masque ne les prends pas en compte, php considérera que la chaine trouvée ne correspond pas puisqu'elle ne respecte pas le masque et poursuivra sans s'arrêter.

Il faut donc bien inclure la notion d'espaces dans ton masque. De même si les espaces ne sont pas systématiques ou peuvent être doublés, triplés, etc., il faut également l'indiquer à php... Toi masque doit pouvoir s'appliquer parfaitement à chacune des chaines que tu cherches à récupérer :)
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

ViPHP
ViPHP | 1996 Messages

12 févr. 2011, 19:06

Je suis pas expert mais je me lance :
$regex = "03-?[ ]?02[-0-9 ]{6,10}";
It is nice to be important but it is more important to be nice
http://www.aureuswebfactory.fr