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

  FORUM HardWare.fr
  Programmation
  PHP

  [PHP] Problème de parser

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[PHP] Problème de parser

n°1185839
baiterave
Posté le 27-08-2005 à 12:28:45  profilanswer
 

Bjour tout le monde!
Voila, j'ai décidé de me faire un ptit parser, et j'ai quelques questions.
D'abord je voudrais remplacer les [] par des <>, mais je sais pas pourquoi, sa marche pas. Pour l'instant je dosi faire mes tests avec des -tirets mais c'est pas super satifaisant. Quelqu'un sait d'où vient le problème?
 
 
Ensuite, j'ai un problème au niveau des images. J'essaye de me faire une balise <image>adresse_de_l'image</image> (ou plutot -image-adresse_de_l'image-/image- X( ) Mais sa marche pas, il m'affiche le code tel-quel, en mettant un lien cliquable. Pour info,

Code :
  1. $texte = preg_replace('!http://[a-z0-9._/-]+!i', '<a href="$0">$0</a>', $texte); // Remplace les URLs "bruts" en liens cliquables     
  2. $texte = preg_replace('!-url=(http://[a-z0-9._/-]+)-(.+)-/url-!isU', '<a href="$1">$2</a>', $texte); // Remplace les URLs "bruts" par du texte     
  3. $texte = preg_replace('![a-z0-9._-]+@[a-z0-9._-]{2,}\.[a-z]{2,4}!iU', '<a href="mailto:$0">$0</a>', $texte); // Remplace les adresses mails "brutes" en adresses mails cliquables     
  4. $texte = preg_replace('!http://[a_z0-9._/-]+\.(jpg|jpeg|png|gif|bmp|tga)!iU', '<img src="$0" alt="Mon Image" />', $texte); // Affiche directement les images au lieu d'afficher les URLs


 
Voici mes regex concernant les urls et adresses mails. Jpense pas que la premiere regex bloque la derniere, si?
 
J'ai cherché un peu dans la doc php, et j'ai rien trouvé de satisfaisant (à vrai dire j'ai surtout cherché pour les délimiteurs :))
Voila. Merci si vous pouvez m'expliquer d'ou vient le problème :)


Message édité par baiterave le 27-08-2005 à 12:33:09
mood
Publicité
Posté le 27-08-2005 à 12:28:45  profilanswer
 

n°1185843
sielfried
Posté le 27-08-2005 à 12:59:08  profilanswer
 

A première vue la première règle bloque la dernière si, faudrait les inverser. [:figti]  
 
Pour le coup du remplacement des [] par des <>, faudrait voir comment tu écris ta/tes règle(s).


---------------
StarCraft Professional Gaming Database | [Ze Topic] Starcraft/BroodWar
n°1185869
omega2
Posté le 27-08-2005 à 13:55:35  profilanswer
 

idem que sielfried, si tu veux utiliser des regexp en série, il faut toujours mettre d'abords la régle dont tous les cas sont aussi intercepté par une régle moins restrictive. Si c'est pas mis dans ce sens là, la régle la plus restrictive ne trouvera rien.  
 
Aussi, il faut faire attention que le changement généré par un des changements ne soit pas intercepté par un autre regexp, sinon tu risques de chercher longtemps d'où vient le probléme.
 
Quand à ton parser, on poura pas t'aider sans que tu nous montre la partie du code qui pose probléme.

n°1186169
baiterave
Posté le 27-08-2005 à 23:39:54  profilanswer
 

Vous vouelz que je vous montre quoi exactement? Une seule RegExp suffit pour les balises <>, ou vous voulez l'intégralité de mon parser?  
 
(attention il est plutot gros :D)

n°1186171
sielfried
Posté le 27-08-2005 à 23:47:20  profilanswer
 

Ben montre les regexp qui font pas ce que tu voudrais. -_-


---------------
StarCraft Professional Gaming Database | [Ze Topic] Starcraft/BroodWar
n°1186177
baiterave
Posté le 28-08-2005 à 00:04:21  profilanswer
 

ben les seuls problèmes qui persistent sont les images (sa marche toujours pas  :??: )
et les délimitations.  
 
Jposte mon code allegé :  

Code :
  1. $contenu = preg_replace('!\*gras\*(.+)\*/gras\*!isU', '<strong>$1</strong>', $contenu); // Pour mettre le texte en gras
  2.     $contenu = preg_replace('!\*italique\*(.+)\*/italique\*!isU', '<em>$1</em>', $contenu); // Pour mettre le texte en italique
  3. $contenu = preg_replace('!\*souligne\*(.+)\*/souligne\*!isU', '<ins>$1</ins>', $contenu); //Pour souligner le texte
  4. $contenu = preg_replace('!\*barre\*(.+)\*/barre\*!isU', '<s>$1</s>', $contenu); // Pour barrer le texte
  5. $contenu = preg_replace('!\*titre1\*(.+)\*/titre\*!isU', '<ins><strong><span style="font-size: 35px;">$1</span></strong></ins>', $contenu); // Titre très important : 35px, gras, souligné
  6. $contenu = preg_replace('!\*titre2\*(.+)\*/titre\*!isU', '<ins><strong><span style="font-size: 25px;">$1</span></strong></ins>', $contenu); // Titre assez important : 25px, gras, souligné
  7. $contenu = preg_replace('!\*titre3\*(.+)\*/titre\*!isU', '<ins><span style="font-size: 15px;">$1</span></ins>', $contenu); // Titre peu important : 15px, souligné
  8. $contenu = preg_replace('!http://[a_z0-9._/-]+\.(jpg|jpeg|png|gif|bmp|tga)!iU', '<img src="$0" alt="Mon Image" />', $contenu); // Affiche directement les images au lieu d'afficher les URLs
  9. $contenu = preg_replace('!http://(www\.)?([a-z0-9._/-]+)!i', '<a href="$0">$0</a>', $contenu); // Remplace les URLs bruts en liens cliquables
  10. $contenu = preg_replace('![a-z0-9._-]+@[a-z0-9._-]{2,}\.[a-z]{2,4}!iU', '<a href="mailto:$0">$0</a>', $contenu); // Remplace les adresses mails brutes en adresses mails cliquables


 
Voila, je crois que c'est bon. Donc, mes problèmes sont les délimiteurs et les images.
Merci :)

n°1186184
sielfried
Posté le 28-08-2005 à 00:29:08  profilanswer
 

Pour les images j'viens de remarquer que t'as [a_z0-9._/-]+ au lieu de [a-z0-9._/-]+, donc forcément, ça capte rien. Un petit i en option ferait pas de mal non plus.
 
Quant aux délimiteurs, c'est quoi le problème, concrètement ?...


---------------
StarCraft Professional Gaming Database | [Ze Topic] Starcraft/BroodWar
n°1186189
baiterave
Posté le 28-08-2005 à 01:20:28  profilanswer
 

ben, les délimiteurs, comme tu peux le voir j'utilise pour l'instant des étoiles (*gras* Texte en gras */gras*)
Et quand je remplace les étoiles par des <> ben sa marche plus : au lieu de m'afficher du texte en gras, il m'affiche <gras>Texte en gras.</gras>
 
Jvai tester pour les images ;)

n°1186191
baiterave
Posté le 28-08-2005 à 01:25:22  profilanswer
 

$contenu = preg_replace('!http://[a_z0-9._/-]+\.(jpg|jpeg|png|gif|bmp|tga)!iU', '<img src="$0" alt="Mon Image" />', $contenu);
 
Normalement si je tape http://www.monsite.com/image.png sa devrait automatiquement remplacer par l'image elle même, non? Parceque la il m'affiche directement l'URL...

n°1186211
sielfried
Posté le 28-08-2005 à 09:44:01  profilanswer
 

Ben je t'ai expliqué que t'avais mis a_z au lieu de a-z, ce qui fait foirer ton masque.
 
Pour le délimiteur <> tu mets bien des \ avant ?

Code :
  1. preg_replace('#\<italique\>(.+)\<italique\>#i', '<em>$1</em>', $contenu);

marche.


---------------
StarCraft Professional Gaming Database | [Ze Topic] Starcraft/BroodWar

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

  [PHP] Problème de parser

 

Sujets relatifs
probleme avec la fonction contains()PHP et tiers
Probleme avec espace membre...probleme avec Allegro
[PHP]Sessions supprimées immédiatementProblème de date avec vb et access
CSS probléme d'affichage entre NavigateursProblème CSS et Fiefox
Probleme avec une variable dans un formulaire[JAVA] Problème de déplacement de fichiers
Plus de sujets relatifs à : [PHP] Problème de parser


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