Expressions régulières... (TOUJOURS DANS LE CACA Rhaaa !!)

Expressions régulières... (TOUJOURS DANS LE CACA Rhaaa !!) - PHP - Programmation

Marsh Posté le 17-01-2003 à 21:53:27    

Je voudrais pouvoir trouver les occurences de sous-chaines présentes dans ma chaine, telles que celles-ci soient comprises entre les caractères [ et ] (quoi qu'il puisse y avoir entre [ et ]. ;)
 
Voilà où j'en suis :
 
$chaine = "coucou c'est moi [imgyoup là boum] . et oui";
$test = split("[.]", $chaine);
 
echo $test[0];
 
et ben ça marche po. Il me renvoie le tout, le saligaud. Pourtant logiquement, il devrait me renvoyer une sous-chaine délimitée par les [ et ] ... grrrr... (j'ai aussi évidemment essayé split("\[.\]", $chaine)...
 
Help, je désepère... (pourtant il me semblait bien avoir compris les exp régulières... :D )


Message édité par Hermes le Messager le 18-01-2003 à 00:35:31
Reply

Marsh Posté le 17-01-2003 à 21:53:27   

Reply

Marsh Posté le 17-01-2003 à 22:22:54    

regarde du cote de ereg()... je crois kil te fait ton truc...

Reply

Marsh Posté le 17-01-2003 à 22:24:24    

J'ai déjà regardé, ça marche pas. Le problème vient de l'expression régulière, pas de la fonction utilisée pour trouver ces expressions. Mais merci de me répondre.
 
$chaine = "coucou c'est moi [imgyoup là boum] . et oui";  
$res = ereg("[.]", $chaine, $test);  
echo $test[0];  
 
ne marche pas...


Message édité par Hermes le Messager le 17-01-2003 à 22:27:28
Reply

Marsh Posté le 17-01-2003 à 22:58:29    

les crochets ont une signification particulière dans les exp. reg.
met des \ devant..
du genre : '.*\[.*\].*'

Reply

Marsh Posté le 17-01-2003 à 23:04:46    

Merci, tu m'as mis sur la voie. c'est le * que j'avais oublié. :D
 
La réponse était :
 
tandannnnnnnnnnnn ...
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
$res = ereg('\[.*\]', $chaine, $test);
 
Thanks  :jap:

Reply

Marsh Posté le 18-01-2003 à 00:13:18    

de rien ...
mais ca fait tjrs plaisir :D...

Reply

Marsh Posté le 18-01-2003 à 00:33:38    

Code :
  1. Rhaaaaaaaaaa !!! Je viens de me rendre compte que je suis toujours dans la merde.
  2. Regardes !!
  3. $chaine = "coucou c'est moi [IMG:photo02:L:N:120] et oui [IMG:photo06:L:N:10] et voilà";
  4. $res = ereg('\[IMG.*\]', $chaine, $test);
  5. echo $test[0],"<br>",$test[1];
  6. Cela me donne [IMG:photo02:L:N:120] et oui [IMG:photo06:L:N:10] !! pour $test[0] au lieu de :
  7. [IMG:photo02:L:N:120] pour $test[0] et [IMG:photo06:L:N:10] pour $test[1].
  8. Rhaaaaaaaa !!!
  9. Help !!


 
Je vais quand même pas devoir faire un for... et réinventer la roue  :sweat:


Message édité par Hermes le Messager le 18-01-2003 à 00:37:03
Reply

Marsh Posté le 18-01-2003 à 00:57:57    

hehe... tu me diras que c logique d'apres l'exp. reg. donné :p
 
le .* prend n'importe quel caractère en compte donc le crochet aussi :(
 
Essaie ca, mais c pas sur que ca marche :D :
 

Code :
  1. "\[IMG[^\]]*\]"


 
p.s: le [^\]] permet d'exclure le crochet du jeu de caracteres

Reply

Marsh Posté le 18-01-2003 à 01:17:25    

Marche pas  :cry:  :cry:  
 
J'ai bien l'impression que je suis bon pour faire une fonction du feu de dieu.  :sweat:

Reply

Marsh Posté le 18-01-2003 à 01:55:02    

voilà un début de réponse :)
 

Code :
  1. $chaine = "coucou c'est moi [IMG:p hoto02:L:N:120] et oui [IMG:p hoto06:L:N:10] et voilà";
  2.   $res = ereg('\[IMG[^]]*\]', $chaine, $test);
  3.   echo count($test),"<br>";
  4.   foreach ( $test as $elt )
  5.     echo $elt,"<br>";


 
mais ca ne donne que la première occurence...
 
pour toutes les avoir il faut le mettre entre parentheses et rajouter une etoile :

Code :
  1. $chaine = "coucou c'est moi [IMG:p hoto02:L:N:120] et oui [IMG:p hoto06:L:N:10] et voilà";
  2.   $res = ereg('(\[IMG[^]]*\])*', $chaine, $test);
  3.   echo count($test),"<br>";
  4.   foreach ( $test as $elt )
  5.     echo $elt,"<br>";


 

Reply

Marsh Posté le 18-01-2003 à 01:55:02   

Reply

Marsh Posté le 18-01-2003 à 02:07:17    

Je te remercie bcp de tes efforts. Le plus drôle, c'est que je suis parvenu au même résultat, mais malheureusement, c'est toujours pas ça.
 
En effet, il renvoie 2 FOIS la même occurence. Autrement dit :
 
2 fois

Code :
  1. [IMG:photo02:L:N:120]

au lieu de :
 

Code :
  1. [IMG:photo02:L:N:120]
  2. et
  3. [IMG:photo06:L:N:10]


 
 :cry:  :cry:  :heink:  Je commence à pêter un plomb avec cette histoire.

Reply

Marsh Posté le 18-01-2003 à 03:21:48    

Bon, j'ai trouvé une solution, c'est de faire l'inverse et de ne retenir que ce que je ne veux pas, puis de le soustraire de la chaine globale avant de séparer les éléments restant que je veux :
 

Code :
  1. $chaine_tbl = preg_split('(\[IMG[^]]*\]*)',$chaine);
  2.     $cpt_split = count($chaine_tbl);
  3.     for ($i = 0; $i <= $cpt_split-1; $i++)
  4.     {
  5.      $chaine = str_replace($chaine_tbl[$i],"",$chaine);
  6.     }
  7.     $tableau_donnees = explode('[IMG:',$chaine);
  8.     $cpt_donnees = count($tableau_donnees);
  9.     for ($j = 1; $j <= $cpt_donnees-1; $j++)
  10.     {
  11.    
  12.      echo $tableau_donnees[$j],"<br>";
  13.     }


 
Mais bon, c lourd...  :heink:  
 
Ya vraiment pas plus simple ??

Reply

Marsh Posté le 18-01-2003 à 04:41:02    

avec cette maniere.. ta pa a mettre l'etoile ;)
prend l'exp reg simple :

Code :
  1. '\[IMG[^]]*\]'

Reply

Marsh Posté le 18-01-2003 à 11:46:49    

ouip, j'ai testé.  :jap:  
 
Mais bon, je trouve incroyable qu'on ne puisse pas faire plus simple.  :heink:


Message édité par Hermes le Messager le 18-01-2003 à 11:47:06
Reply

Marsh Posté le 18-01-2003 à 13:29:54    

Bon, bien que j'arrive à faire ce que je voulais, c'est trop lourd je trouve et donc, j'opte pour une autre solution (générer les images dans une banque pour que celles-ci soient utilisables par la personne directement).
 
Si qqu trouve quand même la soution avec les exp reg, qu'il le dise, ça pourra toujours servir dans d'autres situations.
 

Reply

Sujets relatifs:

Leave a Replay

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