Problème de regex - PHP - Programmation
Marsh Posté le 10-01-2006 à 17:51:09
je sais plus si c'est avec ereg_replace ou avec reg_replace, mais pour l'un des deux,
Code :
|
permet de dire : tout ce qui n'est pas un chiffre.
Marsh Posté le 10-01-2006 à 17:51:40
- 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
Marsh Posté le 10-01-2006 à 17:55:46
omega2 a écrit : je sais plus si c'est avec ereg_replace ou avec reg_replace, mais pour l'un des deux,
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)
Marsh Posté le 10-01-2006 à 19:36:44
avec
Code :
|
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
Marsh Posté le 10-01-2006 à 19:43:57
Donne nous une chaine de caracteres type que tu seras amené a traiter par ton script et precise quels champs tu souhaites recuperer.
Marsh Posté le 10-01-2006 à 19:47:49
je récupère le code html d'un post en fait donc de type :
Code :
|
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 :
|
Marsh Posté le 10-01-2006 à 19:52:49
$foo = preg_replace('#[^0-9]#', '', $foo);
Ne pas oublier le caractère spécial en début/fin de masque.
Marsh Posté le 10-01-2006 à 19:58:19
$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.
Marsh Posté le 10-01-2006 à 20:00:37
sielfried a écrit : $foo = preg_replace('#[^0-9]#', '', $foo); |
ca me donne ca malheureusement
Code :
|
afbilou a écrit : $text = '<!--c1--><div class="codet ... SG<br><!--c2--></div><!--ec2--><br><br>'; |
je vais essayer avec ça merci
Marsh Posté le 10-01-2006 à 20:07:02
zoran a écrit : ca me donne ca malheureusement
|
Code :
|
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.
Marsh Posté le 10-01-2006 à 20:09:01
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]' -> ''
Marsh Posté le 10-01-2006 à 20:09:40
ReplyMarsh Posté le 10-01-2006 à 20:13:23
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.
Marsh Posté le 10-01-2006 à 20:18:29
avec un :
Code :
|
ca me donne bien les résultats que je veux
merci sielfried, afbilou et les autres
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
Marsh Posté le 10-01-2006 à 20:20:49
quitte a faire un substr ... tu devrais le faire AVANT la regex ... c toujours ca de gagné
Marsh Posté le 10-01-2006 à 17:42:53
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 :
mais de temps en temps des ; ou des $ restent néanmoins dans les données que je rapatrie.
Mon code doit être bien crado 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