France Hardware : Forums de discussion - Découvrez notre nouveau comparateur d'offres Internet
Retrouvez les prix près de chez vous :  
Index du forum | Liste des membres | Liste des groupes | Inscription | F-A-Q | Recherche
Pseudo :    Password :     
29 521 membres enregistrés - 2 069 419 posts - 122 057 topics
Index des forums FH  | Index des forums DegroupNews
      Programmation
           Langages Web
                [REGEXP] simplification preg_replace et bbcode
82 connectés(record : 2799 le 29 May 2016 - 15 h 34)

Vous devez vous connecter pour répondre au topic.
[REGEXP] simplification preg_replace et bbcode

agzel


Messages : 1 044
Inscrit le 26/02/03
Non connecté
  Posté le 28 May 2010 - 21 h 11 m 49 s
Salut à tous,

Petit moment que j'ai pas mis les pied ici...

J'ai un souci avec les expressions régulières. C'est pas trop mon fort.
Voilà le code en question :

    Code     
 1. public static function bbcode($texte)
 2.   {
 3.     $bb_replace       = array (
 4.                                 '/(\[[Bb]\])(.+)(\[\/[Bb]\])/',
 5.                                 '/(\[[Ii]\])(.+)(\[\/[Ii]\])/',
 6.                                 '/(\[img\])(.+)(\[\/img\])/',
 7.                                 '/(\[IMG\])(.+)(\[\/IMG\])/',
 8.                                 '/(\[img=)(.+)(\])(\[\/img\])/',
 9.                                 '/(\[IMG=)(.+)(\])(\[\/IMG\])/',
10.                                 '/(\[img=)(.+)(\])(.+)(\[\/img\])/',
11.                                 '/(\[IMG=)(.+)(\])(.+)(\[\/IMG\])/',
12.                                 '/(\[url=)(.+)(\])(.+)(\[\/url\])/',
13.                                 '/(\[URL=)(.+)(\])(.+)(\[\/URL\])/',
14.                                 '/(\[url\])(.+)(\[\/url\])/',
15.                                 '/(\[url=)(.+)(\])(\[\/url\])/',
16.                                 '/(\[URL\])(.+)(\[\/URL\])/',
17.                                 '/(\[URL=)(.+)(\])(\[\/URL\])/'
18.                               );
19.     $bb_replacements  = array (
20.                                 '<b>\\2</b>',
21.                                 '<i>\\2</i>',
22.                                 '<img alt="" src="\\2" />',
23.                                 '<img alt="" src="\\2" />',
24.                                 '<img alt="" src="\\2" />',
25.                                 '<img alt="" src="\\2" />',
26.                                 '<img alt="\\4" src="\\2" />',
27.                                 '<img alt="\\4" src="\\2" />',
28.                                 '<a title="\\4" href="\\2" onclick="window.open(this.href);return false;">\\4</a>',
29.                                 '<a title="\\4" href="\\2" onclick="window.open(this.href);return false;">\\4</a>',
30.                                 '<a href="\\2" onclick="window.open(this.href);return false;">\\2</a>',
31.                                 '<a href="\\2" onclick="window.open(this.href);return false;">\\2</a>',
32.                                 '<a href="\\2" onclick="window.open(this.href);return false;">\\2</a>',
33.                                 '<a href="\\2" onclick="window.open(this.href);return false;">\\2</a>' 
34.                               );
35.     return preg_replace($bb_replace, $bb_replacements, $texte);
36.   }


Comme on peut le voir, j'ai plusieurs répétitions au niveau du tableau $bb_replacements.

Mais je n'arrive pas à trouver la syntaxe exacte pour unifier les img|IMG url|URL etc.

j'ai essayé plusieurs combinaisons dont : '/(\[(img|IMG)\])(.+)(\[\/(img|IMG)\])/',

je bloque.

Need help :)




Woofy
Totalement inutile, complètement indispensable

Messages : 31 551
Inscrit le 11/01/02
Ville : Lyon
Non connecté
  Posté le 28 May 2010 - 22 h 26 m 43 s
Télécharge Regex Coach, quand tu es forcé de faire des regexp c'est un petit logiciel qui sauve la vie.

Sinon ... hum ...
'/(\[[img|IMG]\])(.+)(\[\/[img|IMG]\])/' ?





Erel69
- Ancien Modérateur -
Fantôme
Officiel

Messages : 19 554
Inscrit le 07/11/01
Ville : Lyon
Non connecté
  Posté le 04 June 2010 - 11 h 44 m 38 s
pour le case-insensitive rajoute l'option "i" dans ton pattern

exemple : /(\[img\])(.+)(\[\/img\])/i




Totoffe
Windows, j'en fais du Pulco!

Messages : 1 745
Inscrit le 05/06/02
Ville : Vers Grenoble.
Non connecté
  Posté le 05 July 2010 - 19 h 49 m 46 s
Les regexp ne sont pas censées faire ça. Il doit bien exister une bibliothèque pour gérer ce genre de choses.



Vds: Pièces, Périphériques

agzel


Messages : 1 044
Inscrit le 26/02/03
Non connecté
  Posté le 05 July 2010 - 20 h 58 m 16 s
Merci pour le i, je n'y avait pas pensé du tout.

Du coup, j'ai commencé aussi un petit formateur css à coté.
Il n'est pas encore au point mais c'est un début de piste pour ceux que ça pourrait intéresser :

    Code     
 1. public static function format_css($chaine)
 2.   {
 3.     $chaine = trim($chaine);
 4.     $chaine = str_replace("\t", "", $chaine);
 5.     $chaine = str_replace("\r", "", $chaine);
 6.     $chaine = str_replace("\n", "", $chaine);
 7.     $chaine = preg_replace("( +)", " ", $chaine);
 8.     $chaine = str_replace("{", "{\r\n\t", $chaine);
 9.     $chaine = str_replace("}", "}\r\n\r\n", $chaine);
10.     $chaine = str_replace(":", " : ", $chaine);
11.     $chaine = str_replace(",", ", ", $chaine);
12.     $chaine = str_replace(";", ";\r\n\t", $chaine);
13.     $chaine = preg_replace("( +)", " ", $chaine);
14.     $chaine = str_replace(";\r\n\t}", ";\r\n}", $chaine);
15.     $chaine = str_replace("\t ", "\t", $chaine);
16.     $chaine = str_replace(";\r\n\t/*", "; /*", $chaine);
17.     $chaine = str_replace("*/ ", "*/\r\n\t", $chaine);
18.     $chaine = str_replace("*/.", "*/\r\n.", $chaine);
19.     $chaine = str_replace("*/#", "*/\r\n#", $chaine);
20.     $chaine = str_replace(";\r\n\t}", ";\r\n}", $chaine);
21.     $chaine = str_replace("*/\r\n\t}", "*/\r\n}", $chaine);
22.     $chaine = str_replace("*/}", "*/\r\n}", $chaine);
23.     
24.     $chaine = preg_replace("/\*\/([a-zA-Z]+)/", "*/\r\n\t\\1", $chaine);
25.     $chaine = preg_replace("/(@import\ url\()(.+)(\);)(\ \/*)/", "\\1\\2\\3\r\n\r\n\\4", $chaine);
26.     
27.     $chaine = preg_replace("/\r\n\/\*(.+)\*\/\r\n\t/", "\r\n\/\*\\1\*\/\r\n", $chaine);
28.     
29.     
30.     return $chaine;
31.   }



Message édité 1 fois, la dernière par agzel le 05 July 2010 - 20 h 58.


Erel69
- Ancien Modérateur -
Fantôme
Officiel

Messages : 19 554
Inscrit le 07/11/01
Ville : Lyon
Non connecté
  Posté le 06 July 2010 - 08 h 57 m 51 s


Le 05 juillet 2010 - 19 h 49, Totoffe a écrit :
Les regexp ne sont pas censées faire ça. Il doit bien exister une bibliothèque pour gérer ce genre de choses.


Et que crois-tu que la librairie utiliserait ;)




Page genérée en 0.2862 secondes par RahForum 2.0 | Gzip off |  Stats |  Metaforums |  RSS
© 2004 Cerbere Systems.
Prix Matériel Informatique | Informatique Lyon | Informatique Grenoble | Informatique Annecy | Informatique Marseille | Informatique Bordeaux | Forum Informatique
ADSL | Actualité ADSL | Deligo | Appareil photo | Commande Au Volant
Creative Commons
Message Boards and Forums Directory