Pb preg_match, alternative

Pb preg_match, alternative - PHP - Programmation

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 :bounce:

Reply

Marsh Posté le 18-12-2005 à 15:07:47   

Reply

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 ?


---------------
Me: Django Localization, Yogo Puzzle, Chrome Grapher, C++ Signals, Brainf*ck.
Reply

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 :)

Reply

Marsh Posté le 18-12-2005 à 15:12:46    

0x90 a écrit :

Au pif, kkchose comme :
preg_match_all("#<td><h(5|4)>(.*)</h\1></td>.*>#U",$reg[2], $syn);  
ca marche pas ?


 
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=


Message édité par Henry2naya le 18-12-2005 à 15:13:04
Reply

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).
 
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 :)


 
Si c'est pas capturant tu arrive quand même à le récupérer dans le \1 ?


---------------
Me: Django Localization, Yogo Puzzle, Chrome Grapher, C++ Signals, Brainf*ck.
Reply

Marsh Posté le 18-12-2005 à 15:18:27    

Ha non en effet :mmmfff:

Reply

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).
 
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 :)


 
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...


Message édité par Henry2naya le 18-12-2005 à 15:23:03
Reply

Marsh Posté le 18-12-2005 à 15:27:03    

que veux tu dire par ['\&] et ['\.] ????

Reply

Marsh 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

Reply

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.

Reply

Marsh Posté le 18-12-2005 à 15:32:06   

Reply

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 !
 
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.


 
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... :pt1cable: )
 
;-)

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed