JeuWeb - Crée ton jeu par navigateur
petit probleme de regex - Version imprimable

+- JeuWeb - Crée ton jeu par navigateur (https://jeuweb.org)
+-- Forum : Discussions, Aide, Ressources... (https://jeuweb.org/forumdisplay.php?fid=38)
+--- Forum : Programmation, infrastructure (https://jeuweb.org/forumdisplay.php?fid=51)
+--- Sujet : petit probleme de regex (/showthread.php?tid=4785)



petit probleme de regex - php_addict - 03-05-2010

bonjour

je suis confronté avec un tout petit probleme de regex, et je n'arrives pas à le resoudre:

j'ai une chaine du genre:

Code :
blabla [b]gras[/b] blabla  [i]italique[/i] blabla

je voudrais en extraire ceci:

Code :
[b]gras[/b],[i]italique[/i]

mais avec ma regex suivante:

Code :
    $search[0]='#(.*)\[(.*)\](.*)\[(.*)\](.*)#isU';
    $replace[0]='[$2]$3[$4],';
    $extrait = preg_replace($search, $replace, $texte);

je n'obtiens que:

Code :
[b]gras[/b],[i]italique[/i], blabla

c'est à dire que la fin de la chaine n'est pas remplacée (blabla)

auriez vous la gntillesse de me donner un coup de main? Wink

bonne journée


RE: petit probleme de regex - Allwise - 03-05-2010

Tu captures ce qui est hors balises bbcode. Enlève les parenthèses qui servent à rien :
Code PHP :
<?php 
$search
[0]='#.*\[(.*)\](.*)\[(.*)\].*#isU';
Il faut du coup que tu adaptes la chaîne de remplacement, car on a levé des groupes de capture. Ça devrait devenir
Code PHP :
<?php 
$replace
[0]='[$1]$2[$3],';



RE: petit probleme de regex - keke - 03-05-2010

j'ai jamais rien capté aux regex ... J'utilise que des fonctions de bases.

Désolé !

kéké


RE: petit probleme de regex - php_addict - 03-05-2010

salut

(03-05-2010, 09:52 AM)Allwise a écrit : Tu captures ce qui est hors balises bbcode. Enlève les parenthèses qui servent à rien :
Code PHP :
<?php 
$search
[0]='#.*\[(.*)\](.*)\[(.*)\].*#isU';
Il faut du coup que tu adaptes la chaîne de remplacement, car on a levé des groupes de capture. Ça devrait devenir
Code PHP :
<?php 
$replace
[0]='[$1]$2[$3],';

le resultat reste strictement le même en enlevant les parantheses...comprends pas...:hahahaha: la fin de ma chaine n'est pas éludée...


RE: petit probleme de regex - Ter Rowan - 03-05-2010

(03-05-2010, 02:25 PM)php_addict a écrit : salut

(03-05-2010, 09:52 AM)Allwise a écrit : Tu captures ce qui est hors balises bbcode. Enlève les parenthèses qui servent à rien :
Code PHP :
<?php 
$search
[0]='#.*\[(.*)\](.*)\[(.*)\].*#isU';
Il faut du coup que tu adaptes la chaîne de remplacement, car on a levé des groupes de capture. Ça devrait devenir
Code PHP :
<?php 
$replace
[0]='[$1]$2[$3],';

le resultat reste strictement le même en enlevant les parantheses...comprends pas...:hahahaha: la fin de ma chaine n'est pas éludée...


je ne connais pas assez pour te donner une vraie réponse mais est ce que ce qui est écrit ne sépare pas simplement en :

si il y a [] alors faire []
si il y a xxx alors faire xxx
si il y a [/] alors faire [/]

alors que ce que tu veux c'est

si il y a []xxxx[/] alors faire [] puis xxxx [/]

grosso modo est ce qu'il ne faudrait pas une parenthèse

$search[0]='#.*(\[(.*)\](.*)\[(.*)\]).*#isU';

quite d'abord à extraire la chaine []xxxx[/] puis après à l'exploser
voyez ce que je veux dire ?


RE: petit probleme de regex - julp - 03-05-2010

Hum, c'est une question de gourmandise/non-gourmandise et d'"ambiguïté" avec le métacaractère point matchant tout.
Code :
#([^[]*)\[([^\]]*)\]([^[]*)\[([^\]]*)\]([^[]*)#s
Autre problème ici : des balises imbriquées vont introduire des non-correspondances balises ouvrante/fermante.

S'il est bien question d'extraction, preg_match_all ne serait-elle pas plus appropriée ?
Code :
~\[([^\]]+)\](.*)\[/\1\]~sU



RE: petit probleme de regex - php_addict - 03-05-2010

oulalala la galère !

les expression regulieres
, ce n'est pas la même chose que les Expressions rationnelles globales ?

il y a du POSIX et du PCRE

regex c'est bien "expressions regulieres" ? en quoi est ce different des"Expressions rationnelles globales" ?

j'suis completement perdu... dejà que j'ai du mal avec preg_replace alors avec preg_match_all je t'en parles même pas...

ceci dit mon parser fonctionne très bien quand même mais c'est pas très propre...

je crois que je vais gravement galérer, voir même ne pas y arriver du tout...