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

  FORUM HardWare.fr
  Programmation
  PHP

  [Resolu] Recherche d'occurences dans une variable String

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[Resolu] Recherche d'occurences dans une variable String

n°1322610
zebestt
Posté le 10-03-2006 à 11:43:49  profilanswer
 

Bonjour,
 
J'aurais une petite "colle" pour ceux qui connaissent un peu PHP 1,2,3,4 ou 5 peu importe.
Je m'explique,
j'ai une variable $text qui contient du code source.
 
exemple: $text='<table><tr><td><img src="img.gif" /></td></tr></table>';
 
Je voudrais arriver a creer une fonction qui me modifie cette variable en par exemple :
 
$text='<table><tr><td><a href="img.gif"><img src="img.gif" /></a></td></tr></table>';
 
je sais pas si je peux utiliser tokenizer comme en java. En tout cas c'est encore assez obscure pour le moment, si quelqu'un pouvait m'aider...  
 
Merci :)

Message cité 1 fois
Message édité par zebestt le 10-03-2006 à 15:14:24
mood
Publicité
Posté le 10-03-2006 à 11:43:49  profilanswer
 

n°1322617
dwogsi
Défaillance cérébrale...
Posté le 10-03-2006 à 11:50:49  profilanswer
 

Ca nécessite l'utilisation d'expressions régulières et de fonctions de remplacement dans une chaîne, comme ereg_replace par exemple (http://fr.php.net/ereg_replace).
 
Et pour en apprendre plus sur les expressions régulières : http://www.expreg.com/.

n°1322630
zebestt
Posté le 10-03-2006 à 11:56:37  profilanswer
 

as-tu remarqué que je dois recuperer le nom de l'image? un substr? mais je dois detecter l'image...juste apres, c'est une histoire de ereg_replace, je sais bien ... :/

Message cité 1 fois
Message édité par zebestt le 10-03-2006 à 12:00:28
n°1322646
anapajari
s/travail/glanding on hfr/gs;
Posté le 10-03-2006 à 12:04:54  profilanswer
 

oui il avait remarqué et c'est bien pour ça qu'il te conseillait les regex.
 
Tu peux récuperer un "motif" ( quelque chose que tu as défini entre parenthèse) pour l'utiliser dans le remplacement ( avec $1,$2 ...)

n°1322649
zebestt
Posté le 10-03-2006 à 12:06:44  profilanswer
 

ok je vais essayer ceci. En tout cas merci.

n°1322654
dwogsi
Défaillance cérébrale...
Posté le 10-03-2006 à 12:10:47  profilanswer
 

zebestt a écrit :

as-tu remarqué que je dois recuperer le nom de l'image? un substr? mais je dois detecter l'image...juste apres, c'est une histoire de ereg_replace, je sais bien ... :/


 :fou:  
Si tu connais ereg_replace tu devrais logiquement avoir entendu parlé des regex et donc tu devrais savoir comment t'en servir pour faire ce que tu veut faire ici.
 
(Mon message ne comporte aucune agressivité, des fois qu'un de plus se plaigne de l'accueil sur le forums...)

n°1322656
FlorentG
Unité de Masse
Posté le 10-03-2006 à 12:11:59  profilanswer
 

zebestt a écrit :

Bonjour,
 
J'aurais une petite "colle" pour ceux qui connaissent un peu PHP 1,2,3,4 ou 5 peu importe.
Je m'explique,
j'ai une variable $text qui contient du code source.
 
exemple: $text='<table><tr><td><img src="img.gif" /></td></tr></table>';
 
Je voudrais arriver a creer une fonction qui me modifie cette variable en par exemple :
 
$text='<table><tr><td><a href="img.gif"><img src="img.gif" /></a></td></tr></table>';
 
je sais pas si je peux utiliser tokenizer comme en java. En tout cas c'est encore assez obscure pour le moment, si quelqu'un pouvait m'aider...  
 
Merci :)


 
 
Truc fait en 42 secondes (PHP 5) :

$text='<table><tr><td><img src="img.gif" /></td></tr></table>';
 
$doc = new DOMDocument;
$doc->loadXML($text);
 
$xpath = new DOMXpath($doc);
 
$img_result = $xpath->query('/table/tr/td/img');
if($img_result->length > 0) {
 
  $img = $img_result->item(0);
 
  $a = $doc->createElement('a');
  $a->setAttribute('href', $img->getAttribute('src'));
 
  $img_parent = $img->parentNode;
 
  $img_parent->removeChild($img);
  $a->appendChild($img);
  $img_parent->appendChild($a);
 
  echo $doc->saveXml();
}


[:dawa]

n°1322659
dwogsi
Défaillance cérébrale...
Posté le 10-03-2006 à 12:14:09  profilanswer
 

C'est pas un peut lourd pour ce que ça fait??

n°1322662
the_bigboo
Posté le 10-03-2006 à 12:16:07  profilanswer
 

c'est sur ! Ca peut etre fait facilement avec un preg_match... penche toi sur les expressions réguliere :o

n°1322689
omega2
Posté le 10-03-2006 à 12:43:32  profilanswer
 

Utilisation d'XML?
Attention, si ca n'est pas un texte qui soit valide par rapport à la norme XML, alors l'analyse du texte risque de planter et rien ne sera trouvé ni remplacé.
 
L'utilisation combiné de "strpos"/"stripos" et "substr" serait le plus rapide en terme d'exécution dans le cas présent. Cependant la solution la plus simple au niveau code php, ca reste les expressions réguliéres pour ce genre de cas.

mood
Publicité
Posté le 10-03-2006 à 12:43:32  profilanswer
 

n°1322804
zebestt
Posté le 10-03-2006 à 15:13:06  profilanswer
 

Mon problème est résolu, j'ai utilisé les expressions régulières avec preg, mai cette idée de xml est tres bonne (je retien :)), en tout cas, merci. :hello:

n°1322808
the_bigboo
Posté le 10-03-2006 à 15:15:56  profilanswer
 

tres bonne mais excessivement gourmande compte tenu de ce que tu voulais faire :/

n°1323268
FlorentG
Unité de Masse
Posté le 11-03-2006 à 12:15:16  profilanswer
 

dwogsi a écrit :

C'est pas un peut lourd pour ce que ça fait??


Hihi, caitai pour la frime :D

n°1323324
dwogsi
Défaillance cérébrale...
Posté le 11-03-2006 à 14:45:46  profilanswer
 

Je veux bien mais quand même... un code de 15 lignes pour quelque chose qui peut tenir en une seule.... C'était vraiment QUE pour la frime!

n°1323396
Andr_8888
Posté le 11-03-2006 à 18:29:21  profilanswer
 

L'algorithme :
1. Chercher la position du premier les guillemets, deuxième. Copier le nom du fichier.
2. Chercher "<img", et là insérer <a href = "img.gif"> devant lui
3. Chercher le premier ">" à droite d'ajouté au point 2. Insérer "</a>"
C'est tout!

n°1323405
dwogsi
Défaillance cérébrale...
Posté le 11-03-2006 à 19:01:01  profilanswer
 

Ouai et un coup de preg ça tient en une seule ligne et c'est quand même plus claire!

n°1323424
Andr_8888
Posté le 11-03-2006 à 19:29:06  profilanswer
 

Pour moi il est assez difficile d'écrire une telle expression à une ligne, et encore moi paresseux :)

n°1323447
dwogsi
Défaillance cérébrale...
Posté le 11-03-2006 à 20:06:53  profilanswer
 

Ba tu sais j'ais longtemps galéré avce les regex mais sincérement ça vallait le coup! C'est tellement pratique! En plus tu fait un p'tit coup d'url rewriting avec des regex et ton site est mieux référencé...
 
Bref les regex c'est que du bonheure!

n°1323607
FlorentG
Unité de Masse
Posté le 12-03-2006 à 12:01:38  profilanswer
 

Voilà en mieux :D

$text = '<table><tr><td><img src="img.gif" /></td></tr></table>';
 
echo preg_replace('/(.*)(\<img src="(.*)" \/\> )(.*)/', '$1<a href="$3">$2</a>$4', $text);

n°1323720
the_bigboo
Posté le 12-03-2006 à 16:02:05  profilanswer
 

Magnifique !

n°1323979
anapajari
s/travail/glanding on hfr/gs;
Posté le 13-03-2006 à 09:39:04  profilanswer
 

FlorentG a écrit :

Voilà en mieux :D

$text = '<table><tr><td><img src="img.gif" /></td></tr></table>';
 
echo preg_replace('/(.*)(\<img src="(.*)" \/\> )(.*)/', '$1<a href="$3">$2</a>$4', $text);



Euhhh s'quoi l'interet des parenthèses avant et après le img? ça suffit amplement de faire:

Code :
  1. preg_replace('/<img src="(.*)" \/\>/', '<a href="$1"><img src="$1"\/></a>', $text);


 

n°1324023
FlorentG
Unité de Masse
Posté le 13-03-2006 à 10:53:14  profilanswer
 

Ah ouais :D

mood
Publicité
Posté le   profilanswer
 


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

  [Resolu] Recherche d'occurences dans une variable String

 

Sujets relatifs
[resolu] RAD 6 et tags JSF 1.2Pb boucle for concaténé avec une variable
UML - Débutant en programmation - Recherche de conseilsmême variable dans deux userform
[résolu] identification de membre - pb d'affichage des donnéesVBS - Recherche dans un groupe d'utilisateurs
Fonction Subtotal : placer une variable dans le paramètre TotalList [ RESOLU ] lien particulier dans la page
[ resolu] Faire une alerte message[SQL] passer une variable dans la clause FROM
Plus de sujets relatifs à : [Resolu] Recherche d'occurences dans une variable String


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