[PHP-RegEx] Remplacer des expressions par des caractères

Remplacer des expressions par des caractères [PHP-RegEx] - PHP - Programmation

Marsh Posté le 10-02-2011 à 15:09:32    

Bonjour,
Mon titre n'est pas très clair donc je m'explique: je suis en train d'écrire une classe PHP qui permet de gérer des bibliographies au format BibTeX.
Pour l'instant je parse les fichiers BibTeX, les convertit en XML, puis à partir de là les insère en base de données. Le problème est que les données contenues dans les fichiers BibTeX sont échappées (au format BibTeX). J'ai donc besoin de les dés-échapper.
J'ai trouvé une page qui liste les différents caractères spéciaux et l'échappement correspondant en BibTeX (voir ici), et maintenant il me reste à traiter les données pour remplacer les échappements listés sur la page par les caractères spéciaux correspondant.
 
J'avoue que je suis incapable d'écrire moi-même une expression régulière (il faudra bien que je m'y mette un jour...), donc est-ce que quelqu'un aurait une solution à mon problème ?
 
Merci d'avance!
A+

Reply

Marsh Posté le 10-02-2011 à 15:09:32   

Reply

Marsh Posté le 10-02-2011 à 15:45:13    

Salut !
 

Code :
  1. function replace_char ($str) { 
  2.  
  3.     // Un premier tableau avec les caractères spéciaux
  4.     $search = array( 
  5.                 '/\\\"\{A\} \\\"\{a\}/s', 
  6.                 '/\\H\{o\}/s', 
  7.                
  8.                 (...)
  9.                
  10.                 ); 
  11.  
  12.     // Un deuxième tableau avec les équivalents
  13.     $replace = array( 
  14.                 'valeur à remplacer N°1',
  15.                 'valeur à remplacer N°2',
  16.                 (...)
  17.                 ); 
  18.  
  19.     // On remplace dans $str
  20.     $str = preg_replace ($search, $replace, $str); 
  21.    
  22.     // On renvoie la nouvelle chaîne
  23.     return $str; 
  24. }


 
 
Dans le premier tableau, tu auras plein de "\" pour échapper tous les caractères spéciaux. A toi de te documenter sur les caractères spéciaux dans les expressions régulières ;) (Je pense ne pas avoir fait d'erreur dans les deux premiers, à vérifier !)


---------------
:o
Reply

Marsh Posté le 10-02-2011 à 15:46:22    

Merci beaucoup pour ton aide!!! Je vais me renseigner pour les caractères spéciaux, c'est très sympa de ta part en tout cas.

Reply

Marsh Posté le 10-02-2011 à 15:47:42    

Vu qu'il n'y a pas de règles particulières de format, le regexp n'est pas vraiment utile, un simple str_replace suffit
 
dans la doc php :

Code :
  1. // Génère : You should eat pizza, beer, and ice cream every day
  2. $phrase  = "You should eat fruits, vegetables, and fiber every day.";
  3. $healthy = array("fruits", "vegetables", "fiber" );
  4. $yummy   = array("pizza", "beer", "ice cream" );
  5. $newphrase = str_replace($healthy, $yummy, $phrase);

Reply

Marsh Posté le 10-02-2011 à 15:58:59    

Bon, c'est du PHP, donc ça doit être compatible avec les modules perl, sinon, tu adaptes, mais ça doit être assez transparent.
Utilises le module suivant: Tex::Encode  qui a une procédure qui convertit une chaine Tex en chaine utf8, et bosses a partir du utf8.
 
Note: ce genre de chose, j'en ai fait beaucoup. Il y a toujours des symboles TeX sans équivalent utf8 qui surgissent (ou sans équivalents supportés par le convertisseur, a améliorer, il y a encore des TODO dans son source), bon, dans les bibtex, on peut espérer que c'est pas courant, donc il faut toujours récupérer les messages d'erreur pour voir ce qui ne pas pas, et améliorer le système au fur et a mesure.
 
Cette liste ci est un poil plus complète: http://www.cs.wm.edu/~mliskov/texsymbols.pdf :whistle:  
 
A+,

Message cité 1 fois
Message édité par gilou le 10-02-2011 à 16:01:32

---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
Reply

Marsh Posté le 10-02-2011 à 16:22:44    

gilou a écrit :

Bon, c'est du PHP, donc ça doit être compatible avec les modules perl, sinon, tu adaptes, mais ça doit être assez transparent.
Utilises le module suivant: Tex::Encode  qui a une procédure qui convertit une chaine Tex en chaine utf8, et bosses a partir du utf8.
 
Note: ce genre de chose, j'en ai fait beaucoup. Il y a toujours des symboles TeX sans équivalent utf8 qui surgissent (ou sans équivalents supportés par le convertisseur, a améliorer, il y a encore des TODO dans son source), bon, dans les bibtex, on peut espérer que c'est pas courant, donc il faut toujours récupérer les messages d'erreur pour voir ce qui ne pas pas, et améliorer le système au fur et a mesure.
 
Cette liste ci est un poil plus complète: http://www.cs.wm.edu/~mliskov/texsymbols.pdf :whistle:  
 
A+,


Merci beaucoup pour ton aide, je pense effectivement qu'il peut être plus judicieux d'utiliser le module perl, ou au moins adapter son code en PHP, plutôt que de tout faire à la main :-P
Et merci pour la liste, en effet elle est plus complète, même si la majorité des pages concerne les symboles mathématiques dont je n'ai - à priori - pas besoin.

Reply

Sujets relatifs:

Leave a Replay

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