Crée des liens à partir de mots dans un texte (expressions régulières)

Crée des liens à partir de mots dans un texte (expressions régulières) - PHP - Programmation

Marsh Posté le 07-11-2002 à 20:07:48    

Voici le texte de départ :
Les cartes Nvidia gèrent l'openGL.
 
Le texte transformé :
Les cartes <a href='http://www.nvidia.com'>Nvidia</a> gèrent l'<a href='http://www.opengl.org'>openGL</a>.
 
Ça, pas de problème, je le fais avec :

Code :
  1. $text = ereg_replace('`(\b)(Nvidia)(\b)`i', "\\1<a href='http://www.nvidia.com'>\\2</a>\\3", $text);
  2. ...


Mais là où ça se gâte, c'est si je veux par exemple, faire un lien vers http. Mon code ne fait pas la différence entre le début de l'url est un http placé dans un texte.
 
Une aide serait la bien venue. :)
Merci.
 
Ps : Oui, j'ai déjà pausé la question il y a longtemps. ;)


Message édité par kalex le 07-11-2002 à 20:09:29
Reply

Marsh Posté le 07-11-2002 à 20:07:48   

Reply

Marsh Posté le 08-11-2002 à 08:48:36    

Comprends pas trop ton probleme, soit plus clair, donne un exemple de ce qui va pas.

Reply

Marsh Posté le 08-11-2002 à 11:39:31    

Je n'ai pas réfléchit plus que ça a ton problème mais il me semble simple de faire la différence entre "http" et "href='http://"
 
Sinon tu peut exclure les http contenu dans des balise <a>.
 
Bref il y a pas mal de possibilités... pour les regexp par contre... un vendredi veille de long WE je peux pas t'aider.
 
Mirgolth


Message édité par Mirgolth le 08-11-2002 à 11:50:18

---------------
Livres dont vous êtes le héros
Reply

Marsh Posté le 08-11-2002 à 12:57:23    

Kalex a écrit a écrit :

 
Mon code ne fait pas la différence entre le début de l'url et un http placé dans un texte.




 
début de l'url : précédé par " ou '
http placé dans un texte : précédé par un espace vide

Reply

Marsh Posté le 08-11-2002 à 19:58:55    

D'abord merci pour vos réponses. C'est vrai que j'aurais pu être plus clair.
 
Un autre exemple donc ; si mon texte de départ est :

Code :
  1. Allez voir <a href='http://monsite.com/nvidia.html'>ma page</a> sur Nvidia.


Ça me donnera :

Code :
  1. Allez voir <a href='http://monsite.com/<a href='http//www.nvidia.com'>nvidia</a>.html'>ma page</a> sur <a href='http//www.nvidia.com'>Nvidia</a>.


 
Mon texte de départ aurait aussi pu être :

Code :
  1. Allez voir <a href='http://monsite.com/page01.html'>ma page sur Nvidia</a>.


Avec comme résultat :

Code :
  1. Allez voir <a href='http://monsite.com/page01.html'>ma page sur <a href='http//www.nvidia.com'>Nvidia</a></a>.


 
D'ou le problème. :??:
 
J'ai essayé de rajouter des assertions négatives :

Code :
  1. "`(\b)(?<!<a href='.*'> )(Nvidia)(?<!</a> )(\b)`i"


Mais apparemment, le * n'y est pas permis.


Message édité par kalex le 08-11-2002 à 20:00:52
Reply

Marsh Posté le 10-11-2002 à 18:04:58    

Up

Reply

Marsh Posté le 11-11-2002 à 02:45:29    


<?php
 
$text1 = "Les cartes Nvidia gèrent lopenGL.";
$text2 = "Les <a href=\"http://www.excellentes.com\">excellentes cartes Nvidia gèrent lopenGL</a>.";
$text3 = " is Nvidia is ";
 
$ret = " <a href=\"http://www.nvidia.com\">Nvidia</a> ";
$reg = " (Nvidia) ";
 
$reg2 = "(<a.*> ){1}(.*)(Nvidia)(.*)(</a> ){1}";
$ret2 = "\\1\\2</a> <a href=\"http://www.nvidia.com\">Nvidia</a> \\1\\4</a>";
 
$text = ereg_replace($reg2, $ret2, $text1);  
echo "\n<br><br>".$text."\n";
$text = ereg_replace($reg, $ret, $text);  
echo "\n<br><br>".$text."\n";
 
$text = ereg_replace($reg2, $ret2, $text2);  
echo "\n<br><br>".$text."\n";
$text = ereg_replace($reg, $ret, $text);  
echo "\n<br><br>".$text."\n";
 
$text = ereg_replace($reg2, $ret2, $text3);  
echo "\n<br><br>".$text."\n";
$text = ereg_replace($reg, $ret, $text);  
echo "\n<br><br>".$text."\n";
 
?>

Reply

Marsh Posté le 11-11-2002 à 15:54:43    

Un grand merci à toi beleg.
Je vais voir comment implanter/modifier ça pour l'intégré dans mon code. :)


Message édité par kalex le 11-11-2002 à 15:55:15
Reply

Sujets relatifs:

Leave a Replay

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