par
Berzemus » 29 janv. 2009, 21:25
Oufti.. je ne suis pas peu fier..
Le plus facile, c'est quand même de remplacer les balises que tu veux garder par un ensemble exotique, et puis remplacer tous les <> par _ , avant de remettre en place les balises par après. Ca ira plus vite, à mon sens. Mais c'est pas cooooool.....
Sinon, pour le regex, c'est justement de faire en sorte qu'il ne s'appuie pas sur le nombre de caractères (très dur) et surtout qu'il n'exclue pas d'office les caractères des balises que tu veux garder (si on se base sur tout ce qui n'est pas I ou b, <bobo> ne validera pas..) ('achement trop dur).
Mais bon, si les balises que tu veux garder ne contiennent qu'une lettre, celle-ci devrait faire l'affaire:
Code : Tout sélectionner
(<)(/)?(?(2)([BIbi])?(?(3)q|[^BIbi][^>]*)|([BIbi/])?(?(4)q|[^BIbi/][^>]*))(>)
Le mieux, c'est que la balises genre "<o>" ben il les prend quand même (ça, c'est beau).
Pour filtrer, il suffit de remplacer le groupe 1 et 5 par _
Maintenant, je vais manger.. merci pour le casse-tête.
ps: le gros (très gros) inconvénient, c'est que si la balise commence par B, I, /B ou /I, ben ça passe travers.. genre </Boua> ... peut-être qu'il y a un moyen, mais en regex pur, c'est un peu du suicide quand même... le plus gros problème c'est la logique de regex (ou les perversité qu'on utilise pour aboutir à un système conditionnel). Pour une condition if (a) then (b) else (c), si le masque c valide a, a sera pris. Et pour le masque b, a est déjà décompté/capturé... Et ça devient très dur quand on cherche a capturer du contenu qu'on ne connait pas.
Oufti.. je ne suis pas peu fier..
Le plus facile, c'est quand même de remplacer les balises que tu veux garder par un ensemble exotique, et puis remplacer tous les <> par _ , avant de remettre en place les balises par après. Ca ira plus vite, à mon sens. Mais c'est pas cooooool.....
Sinon, pour le regex, c'est justement de faire en sorte qu'il ne s'appuie pas sur le nombre de caractères (très dur) et surtout qu'il n'exclue pas d'office les caractères des balises que tu veux garder (si on se base sur tout ce qui n'est pas I ou b, <bobo> ne validera pas..) ('achement trop dur).
Mais bon, si les balises que tu veux garder ne contiennent qu'une lettre, celle-ci devrait faire l'affaire:
[code](<)(/)?(?(2)([BIbi])?(?(3)q|[^BIbi][^>]*)|([BIbi/])?(?(4)q|[^BIbi/][^>]*))(>)[/code]
Le mieux, c'est que la balises genre "<o>" ben il les prend quand même (ça, c'est beau).
Pour filtrer, il suffit de remplacer le groupe 1 et 5 par _
Maintenant, je vais manger.. merci pour le casse-tête.
ps: le gros (très gros) inconvénient, c'est que si la balise commence par B, I, /B ou /I, ben ça passe travers.. genre </Boua> ... peut-être qu'il y a un moyen, mais en regex pur, c'est un peu du suicide quand même... le plus gros problème c'est la logique de regex (ou les perversité qu'on utilise pour aboutir à un système conditionnel). Pour une condition if (a) then (b) else (c), si le masque c valide a, a sera pris. Et pour le masque b, a est déjà décompté/capturé... Et ça devient très dur quand on cherche a capturer du contenu qu'on ne connait pas.