Sortir une occurance d'un regex

Sortir une occurance d'un regex - PHP - Programmation

Marsh Posté le 14-10-2004 à 12:00:55    

Voila je suis en train de faire un leger BB parser pour mes besoin perso mais je rencontre un soucis.
 
Dans une fonction pour convertir les tag img en image, j'aimerai tout d'abord recuperer l'url de l'image afin de voir si celle ci existe et l'affiche (ou pas) en consequence
 
j'ai ma methode
 

Code :
  1. private function showImage() {
  2.  while (preg_match("/\[img(=([a-zA-Z0-9\s:\?\=\&]+))?\]([_a-zA-Z0-9\.\/\?&\=\:-]*)\[\/img\]/", $this->str2parse)) {
  3.   $this->str2parse = preg_replace("/\[img(=([a-zA-Z0-9\s:\?\=\&]+))?\]([_a-zA-Z0-9\.\/\?&\=\:-]*)\[\/img\]/", "<img src=\"\\3\" alt=\"\\2\"/>", $this->str2parse);
  4.  }
  5. }


 
Mais j'ai auccune idée comment je peu sortir le \\3 de la chaine :(


Message édité par Profil supprimé le 14-10-2004 à 12:01:28
Reply

Marsh Posté le 14-10-2004 à 12:00:55   

Reply

Marsh Posté le 14-10-2004 à 12:17:28    

euhhh ....  
 
ton tag est toujours du type [img] [/img]
 
[img=untruc] [/img]
n'existe pas ?


---------------
from here and there -- \o__________________________________ -- la révolution de la terre, en silence
Reply

Marsh Posté le 14-10-2004 à 12:21:54    

c'est
 
[img] ou [img=alt text] puis [/img]
 
donc les deux existent

Reply

Marsh Posté le 14-10-2004 à 12:26:05    

je pense que l'unique facon de l'extraire c'est d'utiliser ereg()
http://fr2.php.net/manual/fr/function.ereg.php


---------------
from here and there -- \o__________________________________ -- la révolution de la terre, en silence
Reply

Marsh Posté le 14-10-2004 à 12:35:35    

 while (preg_match("/\[img(=([a-zA-Z0-9\s:\?\=\&]+))?\]([_a-zA-Z0-9\.\/\?&\=\:-]*)\[\/img\]/", $this->str2parse)) {
   
   if (ereg("/\[img(=([a-zA-Z0-9\s:\?\=\&]+))?\]([_a-zA-Z0-9\.\/\?&\=\:-]*)\[\/img\]/", $this->str2parse, $result))
    echo "lu"; //$result[3];
   else
    echo "non";
   $this->str2parse = preg_replace("/\[img(=([a-zA-Z0-9\s:\?\=\&]+))?\]([_a-zA-Z0-9\.\/\?&\=\:-]*)\[\/img\]/", "<img src=\"\\3\" alt=\"\\2\"/>", $this->str2parse);
  }

le truc me retourn le ereg à false, par contre il applique le preg_replace [:delarue5]
 
d'ailleur il me retourne qu'un "non"


Message édité par Profil supprimé le 14-10-2004 à 12:42:42
Reply

Marsh Posté le 14-10-2004 à 12:55:54    

debug 1 : pas besoin de while [:benou]

Reply

Marsh Posté le 14-10-2004 à 12:56:05    

ben visiblement ton motif est mauvais alors [:spamafote]
 
au lieu de echo "lu"; //$result[3];  
 
print_r($result);


---------------
from here and there -- \o__________________________________ -- la révolution de la terre, en silence
Reply

Marsh Posté le 14-10-2004 à 12:57:10    

chacal_one333 a écrit :

debug 1 : pas besoin de while [:benou]


 
je connais pas ton code dans sa gloablité mais ué ca m'etonnait vachement ca  .....


---------------
from here and there -- \o__________________________________ -- la révolution de la terre, en silence
Reply

Marsh Posté le 14-10-2004 à 16:48:31    

chacal_one333 a écrit :

 while (preg_match("/\[img(=([a-zA-Z0-9\s:\?\=\&]+))?\]([_a-zA-Z0-9\.\/\?&\=\:-]*)\[\/img\]/", $this->str2parse)) {
   
   if (ereg("/\[img(=([a-zA-Z0-9\s:\?\=\&]+))?\]([_a-zA-Z0-9\.\/\?&\=\:-]*)\[\/img\]/", $this->str2parse, $result))
    echo "lu"; //$result[3];
   else
    echo "non";
   $this->str2parse = preg_replace("/\[img(=([a-zA-Z0-9\s:\?\=\&]+))?\]([_a-zA-Z0-9\.\/\?&\=\:-]*)\[\/img\]/", "<img src=\"\\3\" alt=\"\\2\"/>", $this->str2parse);
  }

le truc me retourn le ereg à false, par contre il applique le preg_replace [:delarue5]
 
d'ailleur il me retourne qu'un "non"

Pas besoin de délimiteur avec ereg.

Reply

Marsh Posté le 14-10-2004 à 16:52:58    

je les ai retiré, mais ca marche toujours pas, et en plus, j'ai un probleme.
 
Je n'arrive pas a choppé les \n\s\t qui peuvent etre fait
 
genre
 
[b*]test
 
 
test  
            test
[/b*]
 
:(

Reply

Marsh Posté le 14-10-2004 à 16:52:58   

Reply

Marsh Posté le 15-10-2004 à 14:05:59    

NB1: Dans un preg, le code (?: permet de ne pas comptabiliser une parenthèse.
NB2: J'ai peur que le \s contenu dans ton motif soit problématique.
 
Je pense que:

Code :
  1. $this->str2parse = preg_replace(
  2. "|\[img(?:=([^\]]+))?\]([_a-zA-Z0-9\.\/\?&\=\:\-]*)\[\/img\]|e",
  3. "html_img('$2','$1')",
  4. $this->str2parse);


devrait faire l'affaire, en créant bien sûr une fonction html_img du genre:

Code :
  1. function html_img($url,$alt)
  2. {
  3. $alt = htmlspecialchars(($alt)?$alt:$url, ENT_QUOTES);
  4. return("<img src=\"$url\" alt=\"$alt\" />" );
  5. }


 
Evidemment, tu auras loisir d'améliorer html_img pour qu'elle vérifie l'existence de l'image et produise, le cas échéant, un code alternatif.
 
Quant à la gestion des espaces avant et après les *img*, il me semble que \S fait ça...

Reply

Marsh Posté le 15-10-2004 à 14:15:23    

ca c'est pas con [:gratgrat]
 
j'avais jamais pensé ) appelé une method dans une preg_replace

Reply

Marsh Posté le 15-10-2004 à 14:21:24    

chacal_one333 a écrit :

ca c'est pas con [:gratgrat]
 
j'avais jamais pensé ) appelé une method dans une preg_replace


 
encore une chacalerie [:chacal_one333]


---------------
from here and there -- \o__________________________________ -- la révolution de la terre, en silence
Reply

Marsh Posté le 15-10-2004 à 14:21:59    

simogeo a écrit :

encore une chacalerie [:chacal_one333]

ptet pas pousser la  [:klem3i1]

Reply

Marsh Posté le 15-10-2004 à 14:24:43    

chacal_one333 a écrit :

ptet pas pousser la  [:klem3i1]


 
ben c'cest assez fréquent comme usage quand même :D


---------------
from here and there -- \o__________________________________ -- la révolution de la terre, en silence
Reply

Marsh Posté le 15-10-2004 à 14:25:08    

j'ai pas 40 ans d'experience hein [:chrisbk]

Reply

Marsh Posté le 15-10-2004 à 14:27:26    

chacal_one333 a écrit :

j'ai pas 40 ans d'experience hein [:chrisbk]


 
[:andromaque]


---------------
from here and there -- \o__________________________________ -- la révolution de la terre, en silence
Reply

Marsh Posté le 15-10-2004 à 15:26:29    

tin ca merde, ca m'affiche toujours $2 quel que soit les guillement, double, escape et tout [:wam]
 

Reply

Marsh Posté le 15-10-2004 à 15:29:36    

On peut voir le code?

Reply

Marsh Posté le 15-10-2004 à 15:33:11    

private function showImage() {                                                                            
           $this->str2parse = preg_replace("/\[img(=([a-zA-Z0-9\s:\?\=\&]+))?\]([_a-zA-Z0-9\.\/\?&\=\:-]*)\[\/img\]/e", $this->checkImageValidity('$2'), $this->str2parse);
 }
 
        private function checkImageValidity($image)   {
             echo $image;
        }

[:spamafote]


Message édité par Profil supprimé le 15-10-2004 à 15:33:23
Reply

Marsh Posté le 15-10-2004 à 15:36:04    

Mets $this->checkImageValidity('$2') entre guillemets "": n'oublie pas que cet argument doit être une CHAINE interprétable comme du code PHP.

Reply

Marsh Posté le 15-10-2004 à 15:39:06    

je l'avais deja fait, et ca retourne rien :/

Reply

Marsh Posté le 15-10-2004 à 15:41:06    

D'autre part, tu n'as pas neutralisé la première parenthèse capturante (=, donc $2 n'est pas ce que tu crois.
Pour la neutraliser: (?:=

Reply

Marsh Posté le 15-10-2004 à 15:42:46    

c'est parfait :)
 
merci beaucoup ACut, tu m'a beaucoup aidé :)

Reply

Marsh Posté le 15-10-2004 à 15:45:23    

chacal_one333 a écrit :

je l'avais deja fait, et ca retourne rien :/


Ah? Je me demande si "$this->checkImageValidity('$2')" n'est pas interprété trop tôt.
Essaie "$this->" . "checkImageValidity('$2')" juste pour voir...
(Je tâtonne)
 
Edit: bon bah apparemment ça roule...


Message édité par ACut le 15-10-2004 à 15:46:15
Reply

Marsh Posté le 15-10-2004 à 15:51:03    

[:flag]


---------------
Tant que la couleur de la peau sera plus importante que celle des yeux, nous ne connaitrons pas la paix. ● L'écriture, c'est la mémoire du futur. ● Mods FO4
Reply

Marsh Posté le 15-10-2004 à 15:52:36    

sauf le alt [:joce]
 
il me sort
 

Citation :

Parse error: parse error, unexpected ',' in c:\Work\BB_parse\classes\class.BBparser.php(59) : regexp code on line 1
 
Fatal error: preg_replace() [function.preg-replace]: Failed evaluating code: ('http://gmail.google.com/gmail/help/images/logo.gif', 'google') in c:\Work\BB_parse\classes\class.BBparser.php on line 59
 
http://gmail.google.com/gmail/help/images/logo.gif  
 


si je retir le $1 (alt=google) en deuxieme param ca fonctionne nikel cela dit [:franck75]


Message édité par Profil supprimé le 15-10-2004 à 15:56:20
Reply

Marsh Posté le 15-10-2004 à 15:55:05    

Note qu'il y a des trucs que j'ai toujours pas pigés dans ton code. Par exemple, à quoi sert la séquence \s dans le premier motif?

Reply

Marsh Posté le 15-10-2004 à 16:09:47    

chacal_one333 a écrit :

sauf le alt [:joce]
 
il me sort
 

Citation :

Parse error: parse error, unexpected ',' in c:\Work\BB_parse\classes\class.BBparser.php(59) : regexp code on line 1
 
Fatal error: preg_replace() [function.preg-replace]: Failed evaluating code: ('http://gmail.google.com/gmail/help/images/logo.gif', 'google') in c:\Work\BB_parse\classes\class.BBparser.php on line 59
 
http://gmail.google.com/gmail/help/images/logo.gif  
 




Aurais-tu l'extrême obligeance de nous montrer la ligne 59 de class.BBparser.php, ainsi que son voisinage immédiat?

Reply

Marsh Posté le 15-10-2004 à 16:11:59    

la meme que d'habitude
 

private function showImage() {                                                                           //<img src=\"\\3\" alt=\"\\2\"/>
                $this->str2parse = preg_replace("/\[img(?:=([a-zA-Z0-9\s:\?\=\&]+))?\]([_a-zA-Z0-9\.\/\?&\=\:-]*)\[\/img\]/e", "$this->checkImageValidity('$2', '$1')", $this->str2parse);
 }

le preg_replace
 
$1 = alt
$2 = url

Reply

Marsh Posté le 15-10-2004 à 16:16:34    

Et la méthode checkImageValidity?

Reply

Marsh Posté le 15-10-2004 à 16:28:37    

comme avant [:joce]
 

       private function checkImageValidity($image, $alt)   {
            echo $image;
            echo $alt;
        }

Reply

Marsh Posté le 15-10-2004 à 16:43:14    

Ben là je sèche... Est-ce le $this-> qui fout la merde ou y a-t-il une syntax error triviale plus haut?...
 
A mon avis, ça vaudrait le coup, pour voir, de transformer la méthode checkImageValidity en simple function "statique" (enfin, hors de la classe) et d'appeler par conséquent "checkImageValidity('$2', '$1')" en 2e argu du preg.
 
Ce qui m'étonne, c'est que le code que j'ai posté plus haut ne plantait pas...

Reply

Marsh Posté le 15-10-2004 à 16:44:12    

hmmm
 
vais tester ca voir
 
edit : ouais c'est bien ca :/
mais bon ca serait quand mieux si c'etait dans la meme classe quoi :/


Message édité par Profil supprimé le 15-10-2004 à 16:45:13
Reply

Marsh Posté le 15-10-2004 à 16:47:04    

Attends! y a un autre truc qui me déplaît:
$this->checkImageValidity(...)
n'est pas censé IMPRIMER mais RENVOYER une chaîne!!

Reply

Marsh Posté le 15-10-2004 à 16:49:58    

ouais j'y avait pensé, mais ca ne resoud pas le probleme malheuresement

Reply

Marsh Posté le 15-10-2004 à 16:52:08    

Bon là tu me tues Chacal... Je m'avoue vaincu. A+

Reply

Marsh Posté le 15-10-2004 à 16:54:28    

trouvé !!!!!!!
 
"self::validblablabla()" :)
 

Reply

Marsh Posté le 15-10-2004 à 16:55:16    

chacal_one333 a écrit :

hmmm
 
vais tester ca voir
 
edit : ouais c'est bien ca :/
mais bon ca serait quand mieux si c'etait dans la meme classe quoi :/


Pas encore mort! Que donne:
"\$this->checkImageValidity('$2', '$1')" ?

Reply

Marsh Posté le 15-10-2004 à 16:57:29    

ca marchais pas :D

Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

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