[Resolu] Recherche d'occurences dans une variable String

Recherche d'occurences dans une variable String [Resolu] - PHP - Programmation

Marsh Posté le 10-03-2006 à 11:43:49    

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
Reply

Marsh Posté le 10-03-2006 à 11:43:49   

Reply

Marsh Posté le 10-03-2006 à 11:50:49    

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

Reply

Marsh Posté le 10-03-2006 à 11:56:37    

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
Reply

Marsh Posté le 10-03-2006 à 12:04:54    

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

Reply

Marsh Posté le 10-03-2006 à 12:06:44    

ok je vais essayer ceci. En tout cas merci.

Reply

Marsh Posté le 10-03-2006 à 12:10:47    

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

Reply

Marsh Posté le 10-03-2006 à 12:11:59    

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]

Reply

Marsh Posté le 10-03-2006 à 12:14:09    

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

Reply

Marsh Posté le 10-03-2006 à 12:16:07    

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

Reply

Marsh Posté le 10-03-2006 à 12:43:32    

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.

Reply

Marsh Posté le 10-03-2006 à 12:43:32   

Reply

Marsh Posté le 10-03-2006 à 15:13:06    

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:

Reply

Marsh Posté le 10-03-2006 à 15:15:56    

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

Reply

Marsh Posté le 11-03-2006 à 12:15:16    

dwogsi a écrit :

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


Hihi, caitai pour la frime :D

Reply

Marsh Posté le 11-03-2006 à 14:45:46    

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!

Reply

Marsh Posté le 11-03-2006 à 18:29:21    

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!

Reply

Marsh Posté le 11-03-2006 à 19:01:01    

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

Reply

Marsh Posté le 11-03-2006 à 19:29:06    

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

Reply

Marsh Posté le 11-03-2006 à 20:06:53    

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!

Reply

Marsh Posté le 12-03-2006 à 12:01:38    

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

Reply

Marsh Posté le 12-03-2006 à 16:02:05    

Magnifique !

Reply

Marsh Posté le 13-03-2006 à 09:39:04    

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


 

Reply

Marsh Posté le 13-03-2006 à 10:53:14    

Ah ouais :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