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

  FORUM HardWare.fr
  Programmation
  PHP

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

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

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

n°2055839
real_matho​s
Posté le 10-02-2011 à 15:09:32  profilanswer
 

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+

mood
Publicité
Posté le 10-02-2011 à 15:09:32  profilanswer
 

n°2055849
Ydalb
In Crêpes n' Cidre I Trust!
Posté le 10-02-2011 à 15:45:13  profilanswer
 

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
n°2055850
real_matho​s
Posté le 10-02-2011 à 15:46:22  profilanswer
 

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.

n°2055851
smaragdus
whores, drugs & J.S. Bach
Posté le 10-02-2011 à 15:47:42  profilanswer
 

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

n°2055856
gilou
Modérateur
Modzilla
Posté le 10-02-2011 à 15:58:59  profilanswer
 

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é!  --
n°2055875
real_matho​s
Posté le 10-02-2011 à 16:22:44  profilanswer
 

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.


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

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

 

Sujets relatifs
PHP autorise htaccessSed, remplacer les n premières occurrences
[PHP] Insérer un array dans un lien hypertexte[Résolu][PHP/SQL] Ajout variable données inscrite dans bdd par tierce
[PHP] Comment parser un XML sans racine ?[PHP] Jointure sur plusieurs champ ?
[PHP] quelle librairie pour faire des graphes type candlestick?[BATCH/DOS] rechercher/remplacer un ensemble de ligne par d'autres
executer commandes root avec PHP![PHP]Envoyer une fichier à un utilisateur sans lui donner l'adresse
Plus de sujets relatifs à : [PHP-RegEx] Remplacer des expressions par des caractères


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