Aller au contenu
  • Pas encore inscrit ?

    Pourquoi ne pas vous inscrire ? C'est simple, rapide et gratuit.
    Pour en savoir plus, lisez Les avantages de l'inscription... et la Charte de Zébulon.
    De plus, les messages que vous postez en tant qu'invité restent invisibles tant qu'un modérateur ne les a pas validés. Inscrivez-vous, ce sera un gain de temps pour tout le monde, vous, les helpeurs et les modérateurs ! :wink:

[php]Regex posant des problemes


Messages recommandés

Posté(e) (modifié)

Bonjour à tous.

Je suis en ce moment dans la programmation php et je me retrouve confronté à un problème.

j'ai un problème avec les Regex (ou Expressions regulieres).

je vous delivre le bout de code avec des explications qui s'en suivent :

 

Code qui transforme les balises que j'ai créé moi en des vrais balises xhtml :

 

$contenu = preg_replace('!\<souligné\>(.+)\</souligné\>!is', '<span class="souligné">$1</span>', $contenu);

$contenu = preg_replace('!\<barré\>(.+)\</barré\>!is', '<span class="barré">$1</span>',$contenu);

 

$contenu = preg_replace('!\<bleu foncé\>(.+)\</bleu foncé\>!is', '<span class="bleu_fonce">$1</span>', $contenu);

$contenu = preg_replace('!\<bleu\>(.+)\</bleu\>!is', '<span class="bleu">$1</span>', $contenu);

$contenu = preg_replace('!\<bleu clair\>(.+)\</bleu clair\>!is', '<span class="bleu_clair">$1</span>', $contenu);

etc...

 

 

Code qui remet en place les balises fictives par rapport aux vraix balises :

$t = '(.+)';

 

$contenu = preg_replace('!<span class="souligne">'.$t.'</span>!s' , '\<souligné\>$1\</souligné\>', $contenu);

$contenu = preg_replace('!<span class="barre">'.$t.'</span>!s' , '\<barré\>$1\</barré\>', $contenu);

$contenu = preg_replace('!<span class="bleu_fonce">'.$t.'</span>!s' , '\<bleu foncé\>$1\</bleu foncé\>',$contenu);

$contenu = preg_replace('!<span class="bleu">'.$t.'</span>!s' , '\<bleu\>$1\</bleu\>', $contenu);

$contenu = preg_replace('!<span class="bleu_clair">'.$t.'</span>!s','\<bleu clair\>$1\</bleu clair\>',$contenu);

etc...

 

Lorsque je met quelque chose d'ambigüe le parser n'agit plus correctement (oui c'est quand meme tres chaud ce que je demande à php :P ) :

exemple :

<bleu clair><souligné><rouge><barré><orange>Nouvelle </orange></barré></rouge></souligné></bleu clair><jaune><souligné><fuschia><barré><gras><vert clair>couleur </vert clair></gras></barré></fuschia></souligné></jaune> <cyan><souligné><olive></barré><or><italique>claire </italique></or></barré></olive></souligné></cyan> <rouge clair><souligné><vert fluo><barré><vert><italique><gras>foncee</gras></italique></vert></barré></vert fluo></souligné></rouge clair><fuschia><souligné><rose><barré> <bleu clair><gras>emboitee</gras> </bleu clair></barré></rose></souligné></fuschia>

 

Le preg_remplace oublie quelques balises et ne les transformes pas.

 

Auriez vous une solution pour que le remplacement se fasse correctement ?

 

EDIT:

Voila ce qu'il se passe apres la conversion des balises fictives (pris dans la BDD)

 

<span class="bleu_clair">

<span class="souligne">

<span class="rouge">

<span class="barré">

<span class="orange">

Nouvelle

</span>

</barré>

</span>

</souligné>

</bleu clair>

 

<span class="jaune">

<souligné>

<span class="fuschia">

<barré><strong>

<span class="vert_clair">

couleur

</span>

</gras>

</barré>

</fuschia>

</souligne>

</span>

 

<span class="cyan">

<souligne>

<span class="olive">

<barré>

<font color="#E8C417">

<em>

claire

</italique>

</font>

</barré>

</span>

</souligne>

</span>

 

<span class="rouge_clair">

<souligne>

<font color="#A8FDA5">

<barré>

<span class="vert">

<italique>

<gras>

foncee

</gras>

</em>

</span>

</barré>

</font>

</souligne>

</span>

 

<fuschia>

<souligne>

<span class="rose">

<barré>

<bleu clair>

<gras>

emboitee

</strong>

</span>

</span>

</span>

</span>

</span>

 

PS : Si il vous manque des informations n'hesitez pas à me demander des precisions.

Modifié par D@nté

Posté(e)

C'est bon j'ai trouvé une solution.

Le problème provenait du champ de recherche, il fallait remplacer (.+) par ((.*(</?.+>)*)*).

 

Desole pour le derangement.

Rejoindre la conversation

Vous pouvez publier maintenant et vous inscrire plus tard. Si vous avez un compte, connectez-vous maintenant pour publier avec votre compte.
Remarque : votre message nécessitera l’approbation d’un modérateur avant de pouvoir être visible.

Invité
Répondre à ce sujet…

×   Collé en tant que texte enrichi.   Coller en tant que texte brut à la place

  Seulement 75 émoticônes maximum sont autorisées.

×   Votre lien a été automatiquement intégré.   Afficher plutôt comme un lien

×   Votre contenu précédent a été rétabli.   Vider l’éditeur

×   Vous ne pouvez pas directement coller des images. Envoyez-les depuis votre ordinateur ou insérez-les depuis une URL.

  • En ligne récemment   0 membre est en ligne

    • Aucun utilisateur enregistré regarde cette page.
×
×
  • Créer...