Aller au contenu


Photo

encore un défi RegEx


  • Please log in to reply
3 replies to this topic

#1 sigma6

sigma6

    Macfr addict

  • Membres
  • PipPipPipPipPip
  • 960 Messages :
  • Sexe:Masculin
  • Localisation:GVA
  • Passions:Bof...

Posté 27 mai 2011 - 13:46

Salut tout le monde

Suite à une conversion de forum, je me retrouve avec pleins de bbcode tout pourris genre


[size=18:d44aea1f63][b:d44aea1f63]text[/b:d44aea1f63][/size:d44aea1f63]

à la place de

[size=18][b]text[/b][/size]

et du coup le plugin qui convertit les bbcodes n'y pige plus rien…

Je voudrais donc hacker ce plugin pour qu'il fasse abstraction de ce qui est après les :


Le plugin semble pas être hyper bien foutu, mais je crois qu'il y a moyen de contourner le problème.

J'ai pas mal de preg_replace dans le code, mais comme d'hab, j'arrive jamais à faire ce que je veux…

un exemple:

$text = preg_replace('/\['.$bbcode.'=([^ \'\"]{0,512}?)\](.+?)\[\/'.$bbcode.'\]/is','<'.$html[0].' '.$html[1].'="$1">$2</'.$html[0].'>',$text);


j'imagine qu'il faut rajouter la condition des \:(.+?) la dedans?

donc j'ai fait ça:


$text = preg_replace('/\['.$bbcode.'=([^ \'\"]{0,512}?)\<img src='http://forum.macfr.com/public/style_emoticons/<#EMO_DIR#>/sad.gif' class='bbc_emoticon' alt=':(' />.+?)\](.+?)\[\/'.$bbcode.'\<img src='http://forum.macfr.com/public/style_emoticons/<#EMO_DIR#>/sad.gif' class='bbc_emoticon' alt=':(' />.+?)\]/is','<'.$html[0].' '.$html[1].'="$1">$3</'.$html[0].'>',$text);


ça foncitonne plus ou moins mais du coup les bbcode normaux ne sont plus pris en compte…

comment faire?


merci!

p.s.: je joint le fichier php de ce plugin (bbpress) si jamais ça peut aider

Fichier(s) joint(s)


Ce message a été modifié par sigma6 - 27 mai 2011 - 13:48 .


#2 AliGator

AliGator

    (Trop) Grand Bavard

  • Membres d'honneur
  • PipPipPipPipPipPipPipPipPip
  • 12 338 Messages :
  • Configuration:• MacBook Pro 15" 2,2GHz, 10.6
    • MacMini G4 1,42GHz, 10.5
  • Sexe:Masculin
  • Localisation:Rennes (Bretagne, France)
  • Passions:Piano, Cuisine, Danse (Rock, ...), faire des réponses de 3km

Posté 27 mai 2011 - 14:28

donc j'ai fait ça:


$text = preg_replace('/\['.$bbcode.'=([^ \'\"]{0,512}?)\<img src='http://forum.macfr.com/public/style_emoticons/<#EMO_DIR#>/sad.gif' class='bbc_emoticon' alt=':(' />.+?)\](.+?)\[\/'.$bbcode.'\<img src='http://forum.macfr.com/public/style_emoticons/<#EMO_DIR#>/sad.gif' class='bbc_emoticon' alt=':(' />.+?)\]/is','<'.$html[0].' '.$html[1].'="$1">$3</'.$html[0].'>',$text);


ça foncitonne plus ou moins mais du coup les bbcode normaux ne sont plus pris en compte…

Mets ton "\:" dans la parenthèse qui suit et fait suivre le tout d'un "?" pour indiquer que c'est optionel.
Ca donne donc "(\:.+?)?" et pas "\:(.+?)" : un ":" suivi de plein de caractères quelconques (.+), sans être trop gourmand non plus (le "?" derrière le "+"), mais le tout (":" et caractères qui suivent) optionnel.

Ceci dit :
- pourquoi mettre un antislash devant les ":" ? ":" n'est pas un caractère ayant une signification spéciale en RegEx donc nul besoin de l'échapper
- pourquoi jouer sur la greedyness du texte capturé après les ":", au lieu de dire "tout sauf un crochet fermant" ?
- Pense à tester avec des cas du genre :
[b]toto[b]tata[/b]tutu[/b] // risque que le premier "[/b]" soit pris pour la fermeture du premier [b] ?
[b]toto[/b]tata[b]tutu[/b] // risque au contraire que le dernier "[/b]" soit pris comme étant la fermeture du premier, et que le texte "toto[/b]tata[b]tutu" entre les deux soit pris comme tel du coup sans être traité ?

Le posteur fou de macfr
Mon blog: Crunchy Development
______________
Devise Shadok : S'il n'y a pas de solution, c'est qu'il n'y a pas de problème...


#3 sigma6

sigma6

    Macfr addict

  • Membres
  • PipPipPipPipPip
  • 960 Messages :
  • Sexe:Masculin
  • Localisation:GVA
  • Passions:Bof...

Posté 27 mai 2011 - 14:54

Salut!

Merci pour le tip!

ça fonctionne bien pour les bbcode standard genre

[b]text[/b]


mais dès qu'il y a un signe = ça fonctionne plus du genre

[url=http://www.sigmasix.ch]ha[/url]



pour répondre à test questions:

- l'antislash c'était parce que j'avais eu une erreur et je pensais que ça pouvait venir de la
- j'accepte toutes propositions ;) comme tu l'as peut-être compris, j'ai pas fais ce plugin, je veux juste le hacker pour fonctionner avec mon problème de bbcode mal importé
- je fais confiance les yeux fermés à ce plugin et j'ai plus la motiv à chercher plus loin, je cherche juste à résoudre les problèmes à l'heure actuelle ;)


merci encore!

#4 sigma6

sigma6

    Macfr addict

  • Membres
  • PipPipPipPipPip
  • 960 Messages :
  • Sexe:Masculin
  • Localisation:GVA
  • Passions:Bof...

Posté 27 mai 2011 - 15:03

ok j'ai rien dit… je suis nul, j'ai embarqué un " dans mon copié collé qui est resté au mauvais endroit…

merci ali, ça fonctionne parfaitement pour mes besoins!




0 utilisateur(s) en train de lire ce sujet

0 membre(s), 0 invité(s), 0 utilisateur(s) anonyme(s)