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

  FORUM HardWare.fr
  Programmation
  PHP

  defi regexp un peu compliqué..

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

defi regexp un peu compliqué..

n°1594206
bixibu
Ca ... c'est fait!
Posté le 01-08-2007 à 09:45:36  profilanswer
 

Salut ;)
 
Je cherche à porter dynamiquement une balise html de type <font>blabla</font> vers un affichage comme celui ci : <c:style>blabla</c:style> (pour generer des PDF via php..)
 
la balise font originelle peut avoir en argument color et/ou size dans n'importe quel ordre donc :
<font color="#fff000" size="12">blabla/<font> donnera => <c:style:12&#fff000>blabla</c:style>
<font color="#fff000">blabla/<font> donnera => <c:style:null&#fff000>blabla</c:style>
etc..
 
voici la regexp + code auxquels je suis arrivé.. et ca marche dans certain cas.. dans dautre non ! et il n'ya pas vraiment de logique dans les bugs..:

Code :
  1. $finalOutput =  preg_replace_callback(
  2.             '/<font(( +)size="([0-9]+)"|( +)color="(#[0-9a-fA-F]+)" ){1,2}( *)>([. \w!?\-=\+:;,\(\)@°%\*&<>\/€{}\[\]\.~#\|\^²§µ$¤£_"\']*)<\/font>/',
  3.             create_function(
  4.              '$matches',
  5.              '$size = (!empty($matches[3])) ? ":".$matches[3] : ":null";
  6.     $color = (!empty($matches[5])) ? "&".$matches[5] : "&null";
  7.     $output = "<c:style".$size.$color.">".$matches[7]."</c:style>";
  8.     return $output;'
  9.      ),
  10.             $output);


 
ps:j'ai du me taper tous les caracteres speciaux a la main.. c'est pour des test car le PDF bug sur certain caracteres.. c'est assez bizarre.. ca ne marche pas mieu si je met  un (.*) ou  un ([^<\/font> ) au milieu
 
le probleme : la plupart du temps que j'ai plusieurs couleurs dans un meme bloc de texte, le code ne prend que la premiere balise <font et la derniere balise </font fermante.. (et encore ca part en sucette un peu n'importe comment..) :

Citation :

remise s</font>up<font color="#00CCFF">lle</font>nmtaeire
d<font color="#0000FF">e 36| Yaho<font
color="#CCFFFF">uu</font> <font color=
 
"#CCFFFF">c'est</font>
exceptionne
l...


 
A l'aide ?


Message édité par bixibu le 01-08-2007 à 09:47:25
mood
Publicité
Posté le 01-08-2007 à 09:45:36  profilanswer
 

n°1594213
anapajari
s/travail/glanding on hfr/gs;
Posté le 01-08-2007 à 10:06:29  profilanswer
 

quel est l'interêt de le faire en une seule regex?
AMA tu vas vraiment en chier pour réussir à la faire marcher dans tous les cas et ça n'aura que des inconvénients ( truc illisible et imbittable, le moindre changement risque de tout foutre en l'air).
Perso je ferais ça en trois regex dans le genre:


/<(/?)font/<$1c:style:/gi;
/<c:style:(.*?)(size="(\d+)"|)>/<c:style:($2==''?'null':$2)&$1/egi;
/<c:style(.*?)&(.*?)color="(.*?)"/<c:style$1&$3/ig;


c'est ecrit à la perl, à toi d'adapter à preg_*


Message édité par anapajari le 01-08-2007 à 10:07:55
n°1594226
bixibu
Ca ... c'est fait!
Posté le 01-08-2007 à 10:16:48  profilanswer
 

le probleme c'eset que j'utilise la fonction preg_replace_callback qui, il me semble, ne prend en argument qu'un pattern seul.. (donc sur une ligne)..
 
Mais bon de toute facon je vais virer la gestion de l'attribut size ce qui allege ma regexp.. mais le probleme reste le meme.. ce qui merde c'est ce qu'il y a à l'interieur des 2 balises font ouvrante / fermantes.. un (.*) devrait suffire mais ce n'est pas le cas..
plein de couleurs sur un ligne de carateres tout attaché (sans espaces) = NIKEL
si il ya des espaces (et encore ca depend où ils sont placés): ca merde.
 
merci de te pencher sur ce probleme en tous cas


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

  defi regexp un peu compliqué..

 

Sujets relatifs
script sed regexpPetit défi !! Compteurs qui s'incrémentent à l'aide d'une commande
[regexp] minuscules avec tiretsAide pour une expression régulière
Problème de regexp en JSRedirection url + regexp Javascript.
Template Joomla compliqué à réaliser ? Accessibilité ?[ASP.Net] .Net, Fichiers et RegExp
Défi pour les pros : importer des données excel vers access... 
Plus de sujets relatifs à : defi regexp un peu compliqué..


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