Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1192 connectés 

  FORUM HardWare.fr
  Programmation
  PHP

  Problème de regex

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Problème de regex

n°1280746
zoran
Posté le 10-01-2006 à 17:42:53  profilanswer
 

Bonjour,
 
je suis débutant en php, et j'ai monté un petit script qui récupère des infos dans les posts d'un sujet sur mon forum.
J'ai fait en sorte que seulement les chiffres soient conservés (c'est pour un lotofoot automatisé)
 
pour l'instant ce bout de code fonctionne pas mal :
 

Code :
  1. $prono1=ereg_replace("[[:space:]]","",$prono);
  2. $prono=ereg_replace("[a-zA-Z\-\=/</>/!/-/''/-]","",$prono1);


 
mais de temps en temps des ; ou des $ restent néanmoins dans les données que je rapatrie.
 
Mon code doit être bien crado  :sweat: mais il a pour l'instant le mérite de marcher dans 95% des cas.
quelqu'un aurait-il une idée pour un ereg_replace qui conserve juste les chiffres, sans espaces, ni rien d'autre ?
 
merci d'avance !


Message édité par zoran le 10-01-2006 à 17:44:38
mood
Publicité
Posté le 10-01-2006 à 17:42:53  profilanswer
 

n°1280759
omega2
Posté le 10-01-2006 à 17:51:09  profilanswer
 

je sais plus si c'est avec ereg_replace ou avec reg_replace, mais pour l'un des deux,

Code :
  1. [^[:num:]].*

permet de dire : tout ce qui n'est pas un chiffre.

n°1280760
soju
One shot !
Posté le 10-01-2006 à 17:51:40  profilanswer
 

- utilise preg_replace c'est plus rapide
- pourquoi tu ne supprimes pas tout simplement tous les caractères qui ne sont pas des chiffres ? je te laisse traduire en regexp
 
edit: grilled  :whistle:


Message édité par soju le 10-01-2006 à 17:52:06
n°1280765
anapajari
s/travail/glanding on hfr/gs;
Posté le 10-01-2006 à 17:55:46  profilanswer
 

omega2 a écrit :

je sais plus si c'est avec ereg_replace ou avec reg_replace, mais pour l'un des deux,

Code :
  1. [^[:num:]].*

permet de dire : tout ce qui n'est pas un chiffre.


C'est pour ereg
 
Avec un preg je mettrais plutot \D (qui est le contraire de \d qui veut dire n'importe quel chiffre)

n°1280841
zoran
Posté le 10-01-2006 à 19:36:44  profilanswer
 

avec  

Code :
  1. $prono1=preg_replace("[^0-9]","",$prono);


 
le script ne marche pas
 
et si je tente avec avec reg_replace et [^[:num:]].* j'ai un Reg_ectype  
 
c'est dur les regex  :sweat:

n°1280851
afbilou
pouet your life
Posté le 10-01-2006 à 19:43:57  profilanswer
 

Donne nous une chaine de caracteres type que tu seras amené a traiter par ton script et precise quels champs tu souhaites recuperer.

n°1280854
zoran
Posté le 10-01-2006 à 19:47:49  profilanswer
 

je récupère le code html d'un post en fait donc de type :

Code :
  1. <!--c1--><div class="codetop">CODE</div><div class="codemain"><!--ec1-->Bordeaux 1-0 Auxerre<br>Lens 3-1 Nancy<br>Sochaux 0-0 Nice<br>Troyes 0-1 Lille<br>Rennes 2-1 Le Mans<br>AC Ajaccio 0-0 Nantes<br>Monaco 2-0 Strasbourg<br>Metz 0-0 Saint-Etienne<br>Lyon 2-0 Marseille<br>Toulouse 1-1 PSG<br><!--c2--></div><!--ec2--><br><br>


 
les bbcode doivent peut être pas arranger la chose mais j'ai pas vraiment le choix :/
et je souhaite récupérer les différentes scores sous la forme de 20 chiffres colés type :

Code :
  1. 20110020112021113120


Message édité par zoran le 10-01-2006 à 19:48:55
n°1280855
sielfried
Posté le 10-01-2006 à 19:52:49  profilanswer
 

$foo = preg_replace('#[^0-9]#', '', $foo);
 
Ne pas oublier le caractère spécial en début/fin de masque. :spamafote:


---------------
StarCraft Professional Gaming Database | [Ze Topic] Starcraft/BroodWar
n°1280858
afbilou
pouet your life
Posté le 10-01-2006 à 19:58:19  profilanswer
 

$text = '<!--c1--><div class="codet ... SG<br><!--c2--></div><!--ec2--><br><br>';
 
preg_match_all('#([a-z]+) ([0-9]+)-([0-9]+) ([a-z]+)#i' , $text , $result);
 
count($result[0]) -> donne le nombre de resultats (n resultats)
 
$result[1][0] -> Bordeaux
$result[1][1] -> 1
$result[1][2] -> 0
$result[1][3] -> Auxerre
 
$result[2] etc $result[n-1] ... te donnent les resultats suivants.

n°1280860
zoran
Posté le 10-01-2006 à 20:00:37  profilanswer
 

sielfried a écrit :

$foo = preg_replace('#[^0-9]#', '', $foo);
 
Ne pas oublier le caractère spécial en début/fin de masque. :spamafote:


 
ca me donne ca malheureusement  

Code :
  1. --c1-->


 

afbilou a écrit :

$text = '<!--c1--><div class="codet ... SG<br><!--c2--></div><!--ec2--><br><br>';
 
preg_match_all('#([a-z]+) ([0-9]+)-([0-9]+) ([a-z]+)#i' , $text , $result);
 
count($result[0]) -> donne le nombre de resultats (n resultats)
 
$result[1][0] -> Bordeaux
$result[1][1] -> 1
$result[1][2] -> 0
$result[1][3] -> Auxerre
 
$result[2] etc $result[n-1] ... te donnent les resultats suivants.


 
je vais essayer avec ça merci  :jap:  

mood
Publicité
Posté le 10-01-2006 à 20:00:37  profilanswer
 

n°1280867
sielfried
Posté le 10-01-2006 à 20:07:02  profilanswer
 

zoran a écrit :

ca me donne ca malheureusement  

Code :
  1. --c1-->




 

Code :
  1. $foo = '<!--c1--><div class="codetop">CODE</div><div class="codemain"><!--ec1-->Bordeaux 1-0 Auxerre<br>Lens 3-1 Nancy<br>Sochaux 0-0 Nice<br>Troyes 0-1 Lille<br>Rennes 2-1 Le Mans<br>AC Ajaccio 0-0 Nantes<br>Monaco 2-0 Strasbourg<br>Metz 0-0 Saint-Etienne<br>Lyon 2-0 Marseille<br>Toulouse 1-1 PSG<br><!--c2--></div><!--ec2--><br><br>';
  2. echo preg_replace('#[^0-9]#', '', $foo);


 
affiche 111031000121002000201122 chez moi. Y'a juste quelques chiffres qui traînent devant et derrière, donc faut d'abord preg_matcher ce qu'il faut.


Message édité par sielfried le 10-01-2006 à 20:09:01

---------------
StarCraft Professional Gaming Database | [Ze Topic] Starcraft/BroodWar
n°1280869
afbilou
pouet your life
Posté le 10-01-2006 à 20:09:01  profilanswer
 

la solution de sielfried ne fonctionne que si l'ensemble de ton document ne contient aucun autre chiffre que ceux des resultats sportifs. Il faudrait donc effectuer un prétraitement (a bas de regex par exemple) pour ne recuperer que ce qui se trouve entre <div class="codemain"> et </div>
 
un preg_match avec '#<div class="codemain">.*</div>#U'
puis le preg_replace qu'il suggere '[^0-9]' -> ''

n°1280870
sielfried
Posté le 10-01-2006 à 20:09:40  profilanswer
 
n°1280876
afbilou
pouet your life
Posté le 10-01-2006 à 20:13:23  profilanswer
 

mais une fois ta chaine numérique recupérée tu vas faire un traitement dessus je suppose ? ca me parraissait plus judicieux de recuperer les données completes et separées comme il faut dans un tableau (le $result que j'utilise) c'est pourquoi je proposais cette solution.

n°1280885
zoran
Posté le 10-01-2006 à 20:18:29  profilanswer
 

avec un :
 

Code :
  1. $prono1=preg_replace('#[^0-9]#', '', $prono);
  2. $prono=substr($prono1,2,20);


 
ca me donne bien les résultats que je veux  
 
merci sielfried, afbilou et les autres  :jap:  
 
c'est vrai que je la traite après la chaine, mais disons que j'ai déjà codé cette partie là et ca fonctionne.
mais je reprendrai tout avec ta solution histoire d'alléger le code, c'est vrai que ca sera plus simple

n°1280890
afbilou
pouet your life
Posté le 10-01-2006 à 20:20:49  profilanswer
 

quitte a faire un substr ... tu devrais le faire AVANT la regex ... c toujours ca de gagné :p


Message édité par afbilou le 10-01-2006 à 20:20:59

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  PHP

  Problème de regex

 

Sujets relatifs
Probleme de publipostage(Resolu)Problème de couleur avec un JTabbedPane
Problème de connexion avec l'utilisateur ASPNET???probléme avec create_element qui retourne NULL
[Perl] Probleme avec Fork[Javascript] problème avec la regex search
problème avec un regexProbleme d'ecriture d'un regex.
probleme avec RegExProbleme avec les regex
Plus de sujets relatifs à : Problème de regex


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR