Pb preg_match, alternative - PHP - Programmation
Marsh Posté le 18-12-2005 à 15:09:20
Au pif, kkchose comme :
preg_match_all("#<td><h(5|4)>(.*)</h\1></td>.*>#U",$reg[2], $syn);
ca marche pas ?
Marsh Posté le 18-12-2005 à 15:12:38
le choix en tre CA ou CECI ca se fait avec (CA|CECI) et non pas [CA|CECI]. Il est meme conseillé de faire (?:CA|CECI) pour ne pas ke les parentheses soient capturantes alors que ce n'est pas utile (gain de vitesse et de memoire).
mais il y a ecnore une solution plus elegante a ton probleme :
preg_match_all('#<td><h(?:4|5)>(.*)</h\1></td>.*>#U',$reg[1], $syn2);
voila
Marsh Posté le 18-12-2005 à 15:12:46
0x90 a écrit : Au pif, kkchose comme : |
Merci, mais en fait j'ai simplifié les balises que je cherche pour être plus clair, en fait les balises c'est:
m_gen_cprojection=(.*)['\.]html
mcp_gen_cprojection=(.*)['\&]codepostal=
Marsh Posté le 18-12-2005 à 15:13:44
afbilou a écrit : le choix en tre CA ou CECI ca se fait avec (CA|CECI) et non pas [CA|CECI]. Il est meme conseillé de faire (?:CA|CECI) pour ne pas ke les parentheses soient capturantes alors que ce n'est pas utile (gain de vitesse et de memoire). |
Si c'est pas capturant tu arrive quand même à le récupérer dans le \1 ?
Marsh Posté le 18-12-2005 à 15:20:44
afbilou a écrit : le choix en tre CA ou CECI ca se fait avec (CA|CECI) et non pas [CA|CECI]. Il est meme conseillé de faire (?:CA|CECI) pour ne pas ke les parentheses soient capturantes alors que ce n'est pas utile (gain de vitesse et de memoire). |
alors j'ai essayé :
preg_match_all("#(?:mcp_gen_cprojection=(.*)['\&]codepostal=|m_gen_cprojection=(.*)['\.]html ).*>#U",$reg[1], $syn);
Il trouve les premieres balises (mcp_gen) mais pas le deuxième choix... (m_gen)
Si j'inverse les deux c l'inverse : donc y'a que le premier choix qui marche...
Marsh Posté le 18-12-2005 à 15:27:03
ReplyMarsh Posté le 18-12-2005 à 15:28:21
afbilou a écrit : que veux tu dire par ['\&] et ['\.] ???? |
Je croyais que ct pour les caractères spéciaux, si je laisse "&" et "." ca marche aussi, et j'ai changé pour ca...
Mais toujours le meme pb, il ne reconnait que le premier choix
Marsh Posté le 18-12-2005 à 15:32:06
Pour le & c'est bon ... mais laisse pas le . tout seul ... ca matche n'import kel caractere sinon !
Il est difficile de t'aider avec pour seule indication un pattern visiblement bugé puisqu'il ne marche pas comme tu le souhaites. Montre nous un bout de texte que tu veux passer a la preg_match_moulinette et met en evidence les champs que tu veux recuperer dans ce texte.
Marsh Posté le 18-12-2005 à 15:41:42
afbilou a écrit : Pour le & c'est bon ... mais laisse pas le . tout seul ... ca matche n'import kel caractere sinon ! |
Merci beaucoup pour les conseils, c mon analyse du pré-mouliné qui était pas top, mais vos conseils m'ont bien aidé
merci mille fois... (et comme on dit, on peux remercier mille fois une personne, mais on peux pas remercier une fois mille personne..; euh non ca pas , on peux... )
;-)
Marsh Posté le 18-12-2005 à 15:07:47
Bonjour j'ai un petit problème avec preg:
je voudrais les chaines entre <td><h5> et </td></h5> ou entre <td><h4> et </td></h4>
séparément les deux preg marchent :
preg_match_all("#<td><h5>(.*)</h5></td>.*>#U",$reg[1], $syn);
preg_match_all("#<td><h4>(.*)</h4></td>.*>#U",$reg[1], $syn2);
si je fais:
preg_match_all("#[<td><h4>|<td><h5>](.*)[</td></h4>|</h5></td>].*>#U",$reg[1], $syn);
je récupère aussi les chaines entre <td><h5> et </td></h4> ou une autre combinaison ce que je ne veux pas;
J'ai donc essayé:
preg_match_all("#[<td><h4>(.*)</td></h4>|<td><h5>(.*)</h5></td>].*>#U",$reg[1], $syn);
mais ca donne rien :-(
Quelqu'un peux m'aider svp??
Merci
NaY