Pages : 1
#1 Le 01/07/2008, à 14:19
- mansonboy
[php] problem regex
bonjour, depuis quelques jour j'essaye de faire quelques chose mais il y a un problem. Je dois faire une regex sur une page internet, donc je dois selectioner tout ce qui est entre ces balises :
<hr width="90%" /> et <table width=70% border='1px solid' align='center'>
Ma regex commence bien a recuperer seulement apres le <hr width="90%" /> mais elle continu également apres <table width=70% border='1px solid' align='center'>.
Voila ma regex :
$var = preg_replace('#(.*)<hr width="90%" \/>(.*)<table width=70% border=\'1px solid\' align=\'center\'>#is', '$2', $page);
Merci d'avance de votre aide parce que je pete un cable la.
Hors ligne
#2 Le 01/07/2008, à 14:38
- aeacides
Re : [php] problem regex
Je n'ai pas trop le temps de chercher, mais un conseil que je pourrais te donner pour débugger serait d'essayer de trouver seulement cette chaîne:
<table width=70% border=\'1px solid\' align=\'center\'>
Si ton expression retrouve cette chaîne, tu peux alors ajouter le reste. Car peut-être ton problème vient de là. Si en ajoutant le reste ça bug, et bien il y a un problème là:
(.*)
ou là
#is
Tu pourrais regarder là aussi pour plus d'info: http://ca.php.net/manual/fr/function.preg-replace.php
http://www.manuelphp.com/php/function.preg-replace.php
@+
Dernière modification par aeacides (Le 01/07/2008, à 14:41)
http://www.q-be.ca
Hors ligne
#3 Le 01/07/2008, à 15:03
- mansonboy
Re : [php] problem regex
Il la retrouve bien.
Dernière modification par mansonboy (Le 01/07/2008, à 15:04)
Hors ligne
#4 Le 01/07/2008, à 20:56
- Yannick_LM
Re : [php] problem regex
bah oui, le .* est "glouton". Il va chercher le plus loin possible.
Par exemple, avec la regexp:
/<(.*)>/
et le texte:
<blabla> qmlksjdfmqj <blibli> , ce qui est matché, c'est toute la chaîne.
Une solution possible est de faire:
/<[^>]*>/ , qui ne matchera que <blabla>
voilà
(Sinon, en Perl, y a moyen de préciser le degré de "gloutonnerie" des regexpes, mais je sais pas si c'est pareil en php)
Trucs et astuces pour Vim
Ma web page avec des trucs dessus ...
Hors ligne
#5 Le 01/07/2008, à 21:24
- mansonboy
Re : [php] problem regex
Sa me donne ceci :
$var = preg_replace('#<hr width="90%" \/><[^>]*><br><br>#', '$1', $page);
Sa m'affiche tout cette fois ci...
Hors ligne
#6 Le 02/07/2008, à 08:33
- Alain.g
Re : [php] problem regex
Ma regex commence bien a recuperer seulement apres le <hr width="90%" /> mais elle continu également apres <table width=70% border='1px solid' align='center'>.
Voila ma regex :
$var = preg_replace('#(.*)<hr width="90%" \/>(.*)<table width=70% border=\'1px solid\' align=\'center\'>#is', '$2', $page);
Merci d'avance de votre aide parce que je pete un cable la.
Bonjour
Tu utilises preg_replace, qui sert à faire des substitutions. Là tu demandes de substituer tout jusqu'à la balise '<table…>' (compris) par ce qui est entre '<hr…>' et '<table…>'. Donc ce qui suit <table..> sera conservé, rien d'étonnant.
Pour éviter cela il faudrait remplacer tout jusqu'à la fin par ce qui est en '<hr…>' et '<table…>', en ajoutant '.*' à la fin du motif.
Par ailleurs la première parenthèse capturante est inutile.
Ceci dit il serait plus approprié d'utiliser preg_match :
preg_match('#<hr width="90%" />(.*)<table width=70% border=\'1px solid\' align=\'center\'>#is', $page, $var);
preg_match retourne un tableau, la partie cherchée correspond ici à $var[1]
Dernière modification par Alain.g (Le 02/07/2008, à 08:41)
Xubuntu Karmic !
Hors ligne
#7 Le 02/07/2008, à 18:56
- mansonboy
Re : [php] problem regex
Sa marche pas...
Hors ligne
#8 Le 02/07/2008, à 19:02
- Alain.g
Re : [php] problem regex
#!/usr/bin/php
<?php
$page="pas bon<hr width=\"90%\" />
bon
<table width=70% border='1px solid' align='center'>
pas bon";
preg_match('#<hr width="90%" />(.*)<table width=70% border=\'1px solid\' align=\'center\'>#is', $page, $var);
echo $var[1];
?>
Renvoie bien "bon", donc ça marche
Dernière modification par Alain.g (Le 02/07/2008, à 19:03)
Xubuntu Karmic !
Hors ligne
Pages : 1