Problèmes Expression Régulière

Répondre
dib258
le 22/06/2005 à 03:35
dib258
Bonjour, Voila j'ai fait un petit code avec des Expressions Régulière pour
transformer certaine balise qui me sont envoyé par un autre code...
ces balises ne sont pour la plupart pas valide en Xhtml
(elle sont devenue obsolettes) ou elle prennent de la place pour rien...

Dans mon code certaine marche, il y en a qu'une qui marche, 2 autre qui ne font rien du tout et une qui marche mais pose problème avec une fonction (regarder les commentaires sur les motifs.

<?php
/* OK______________________________
$txt = '<span style="color: rgb(51, 204, 0);">Salut</span><br>
<span style="color: rgb(0, 191, 255);">Salut</span><br>
<span style="color: rgb(255, 255, 0);">Salut</span><br>
<span style="color: rgb(255, 153, 0);">Salut</span><br>
<span style="color: rgb(255, 0, 0);">Salut</span><br>';
*/
/* PAS_OK__________________________
$txt = '<ol>
<li style="color: rgb(0, 191, 255);">Un liste chiffrée</li>

<li><span style="color: rgb(0, 191, 255);">En couleur ?</span></li>
</ol>';
*/
/* OK_SAUF_FONCTION_________________
$txt = '<font style="color: rgb(51, 204, 0);" size="7">salut</font>';
*/
/* PAS_OK__________________________
$txt = '<div style="text-align: center;"><span style="color: rgb(255, 153, 0);">Salut</span><br>
</div>';
*/
$txt ='<font size="7"><font size="3">s</font></font>';

function new_size ($size, $txt, $nbr="", $hd="") {
if ($txt == "1") { $txt = 10;}
if ($txt == "2") { $txt = 13;}
if ($txt == "3") { $txt = 16;}
if ($txt == "4") { $txt = 18;}
if ($txt == "5") { $txt = 24;}
if ($txt == "6") { $txt = 32;}
if ($txt == "7") { $txt = 48;}
if ($nbr == 1) {
$txt = '<span style="color: '.$hd.'; font-size: '.$size.'px;">'.$txt.'</span>';
} else {
$txt = '<span style="font-size: '.$size.'px;">'.$txt.'</span>';
}
return($txt);
}

$frst[] = '<br>';
$frst[] = 'rgb(51, 204, 0)';
$frst[] = 'rgb(0, 191, 255)';
$frst[] = 'rgb(255, 255, 0)';
$frst[] = 'rgb(255, 153, 0)';
$frst[] = 'rgb(255, 0, 0)';
$frst[] = 'rgb(255, 255, 255)';

$scnd[] = '';
$scnd[] = '#33CC00';
$scnd[] = '#00BFFF';
$scnd[] = '#FFFF00';
$scnd[] = '#FF9900';
$scnd[] = '#FF0000';
$scnd[] = '#FFFFFF';

$dibcode[] = '`<li><span style="(.*?)">(.*+)</span></li>`siU';
// il ne réagit pas du tout
$dibcode[] = '`<font style="color: (\#[a-zA-Z0-9]+);" size="([1-7]{1})">(.*)</font>`siU';
// j'ai une fonction avec et il affiche le texte au lieu du résultat de la fonction
$dibcode[] = '`<div style="(.*)"><span style="(.*)">(.*)</span>()*</div>`siU';
// il ne réagit pas du tout
$dibcode[] = '`<font size="([1-7]+)">(.*)</font>`si';
// il change le premier mais pas si il y en a plusieurs
// et j'aimerais que ce dernier RegExp compte le nombre de balises
// imbriquées et retourne celle qui est le plus au milieu (juste le chiffre
// quoi :))

$endcode[] = '<li style="color :$1;">$2</li>';
$endcode[] = 'new_size("$2", "$3", 1, "$1");';
$endcode[] = '<div style="$1 $2">$3</div>';
$endcode[] = '<span style="font-size: $1;">$2</span>';

$txt = str_replace($frst, $scnd, $txt);

$txt = preg_replace($dibcode, $endcode, $txt);

echo $txt;
?>


Merci d'avance

++

Ps : les commentaires tout au dessus sont les texte d'essai pour les regexp...
Dib258
zebden
le 23/06/2005 à 10:33
zebden
J'ai survolé mais pour l'histoire de la fonction non executé, as tu essayé

$endcode[] = new_size("$2", "$3", 1, "$1"); // Sans delimiter la fonction qu'elle puisse s'executer.

Ensuite pour les li, tu prends en var temp tout ce qu'il y a dans l'attribut style puis tu remplace en mettant style="color: soit tu remplace juste le code couleur en le mettant dans le li soit tu y inclus tout ce qu'il y avait dans le span et dans ce cas virer le color dans le li. (super clair).

Pour le dernier cas, faudrait revoir la synthaxe des exp regu plus en profondeur mais la j'ai pas vraiment le temps :/
zebdinou pour les intimes / Blog : http://www.zebden.fr
Répondre

Ecrire un message

Votre message vient d'être créé avec succès.
LoadingChargement en cours