Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1459 connectés 

  FORUM HardWare.fr
  Programmation
  PHP

  Sortir une occurance d'un regex

 


 Mot :   Pseudo :  
 
 Page :   1  2
Page Précédente
Auteur Sujet :

Sortir une occurance d'un regex

n°873031
Profil sup​primé
Posté le 14-10-2004 à 12:00:55  answer
 

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
mood
Publicité
Posté le 14-10-2004 à 12:00:55  profilanswer
 

n°873049
simogeo
j'ai jamais tué de chats, ...
Posté le 14-10-2004 à 12:17:28  profilanswer
 

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
n°873052
Profil sup​primé
Posté le 14-10-2004 à 12:21:54  answer
 

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

n°873054
simogeo
j'ai jamais tué de chats, ...
Posté le 14-10-2004 à 12:26:05  profilanswer
 

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
n°873059
Profil sup​primé
Posté le 14-10-2004 à 12:35:35  answer
 

 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
n°873066
Profil sup​primé
Posté le 14-10-2004 à 12:55:54  answer
 

debug 1 : pas besoin de while [:benou]

n°873067
simogeo
j'ai jamais tué de chats, ...
Posté le 14-10-2004 à 12:56:05  profilanswer
 

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
n°873069
simogeo
j'ai jamais tué de chats, ...
Posté le 14-10-2004 à 12:57:10  profilanswer
 

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
n°873331
kalex
Posté le 14-10-2004 à 16:48:31  profilanswer
 

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.

n°873338
Profil sup​primé
Posté le 14-10-2004 à 16:52:58  answer
 

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*]
 
:(

mood
Publicité
Posté le 14-10-2004 à 16:52:58  profilanswer
 

n°874034
ACut
Posté le 15-10-2004 à 14:05:59  profilanswer
 

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

n°874041
Profil sup​primé
Posté le 15-10-2004 à 14:15:23  answer
 

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

n°874054
simogeo
j'ai jamais tué de chats, ...
Posté le 15-10-2004 à 14:21:24  profilanswer
 

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
n°874057
Profil sup​primé
Posté le 15-10-2004 à 14:21:59  answer
 

simogeo a écrit :

encore une chacalerie [:chacal_one333]

ptet pas pousser la  [:klem3i1]

n°874061
simogeo
j'ai jamais tué de chats, ...
Posté le 15-10-2004 à 14:24:43  profilanswer
 

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
n°874063
Profil sup​primé
Posté le 15-10-2004 à 14:25:08  answer
 

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

n°874066
simogeo
j'ai jamais tué de chats, ...
Posté le 15-10-2004 à 14:27:26  profilanswer
 

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
n°874132
Profil sup​primé
Posté le 15-10-2004 à 15:26:29  answer
 

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

n°874136
ACut
Posté le 15-10-2004 à 15:29:36  profilanswer
 

On peut voir le code?

n°874137
Profil sup​primé
Posté le 15-10-2004 à 15:33:11  answer
 

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
n°874139
ACut
Posté le 15-10-2004 à 15:36:04  profilanswer
 

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

n°874142
Profil sup​primé
Posté le 15-10-2004 à 15:39:06  answer
 

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

n°874143
ACut
Posté le 15-10-2004 à 15:41:06  profilanswer
 

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: (?:=

n°874144
Profil sup​primé
Posté le 15-10-2004 à 15:42:46  answer
 

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

n°874146
ACut
Posté le 15-10-2004 à 15:45:23  profilanswer
 

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
n°874152
Gilbert Go​sseyn
Dr Liara T'Soni
Posté le 15-10-2004 à 15:51:03  profilanswer
 

[: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
n°874155
Profil sup​primé
Posté le 15-10-2004 à 15:52:36  answer
 

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
n°874159
ACut
Posté le 15-10-2004 à 15:55:05  profilanswer
 

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?

n°874179
ACut
Posté le 15-10-2004 à 16:09:47  profilanswer
 

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?

n°874182
Profil sup​primé
Posté le 15-10-2004 à 16:11:59  answer
 

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

n°874185
ACut
Posté le 15-10-2004 à 16:16:34  profilanswer
 

Et la méthode checkImageValidity?

n°874206
Profil sup​primé
Posté le 15-10-2004 à 16:28:37  answer
 

comme avant [:joce]
 

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

n°874227
ACut
Posté le 15-10-2004 à 16:43:14  profilanswer
 

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

n°874230
Profil sup​primé
Posté le 15-10-2004 à 16:44:12  answer
 

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
n°874237
ACut
Posté le 15-10-2004 à 16:47:04  profilanswer
 

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

n°874242
Profil sup​primé
Posté le 15-10-2004 à 16:49:58  answer
 

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

n°874245
ACut
Posté le 15-10-2004 à 16:52:08  profilanswer
 

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

n°874248
Profil sup​primé
Posté le 15-10-2004 à 16:54:28  answer
 

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

n°874251
ACut
Posté le 15-10-2004 à 16:55:16  profilanswer
 

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')" ?

n°874257
Profil sup​primé
Posté le 15-10-2004 à 16:57:29  answer
 

ca marchais pas :D

mood
Publicité
Posté le   profilanswer
 

 Page :   1  2
Page Précédente

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  PHP

  Sortir une occurance d'un regex

 

Sujets relatifs
Sortir d'un exécutable crée par delphi a partir d'un touche de clavier[regex] matcher un partage réseau
regex souci de débutant.[JAVA] regex, pattern, matcher et group sont dans un bateau
regex --> help!gérer [code][/code] avec une regex
Regex contenue dans une chaine de caractèreRegex toujours...
perl + regex [resolu][Résolu] [Regex] reconnaitre une chaîne non complète - java
Plus de sujets relatifs à : Sortir une occurance d'un regex


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR