Page 1 sur 1
Multi balises dans REGEX dans preg_match_all
Posté : 10 juin 2008, 12:13
par stagiaire_titn
Bonjour,
Je suis actuellement en stage en entreprise, et j'ai été autorisé à demander de l'aide sur ce forum :
Savez vous comment je doit faire dans mon REGEX afin qu'il selectionne n'importe quel texte entre [ php] et
[php /]
et entre [ html] et [ /html]
J'ai réussi à faite ça :
//-->> Détect entre [php] et
AND
et
$masque = ('`\['.$php_balise.'](.+?)\[/'.$php_balise.']`si');
[/php]
J'ai raté à faire ça :
//-->> Détect entre [php] et
AND
et
$masque = "(\
(.*)\
)(\
(.*)\
)";
[/php]
Et faut que sa fonctionne avec autant de balises que j'en aurai besoin...
Merci...
Posté : 10 juin 2008, 21:13
par stagiaire_titn
Même avec un OR... je prend c'est urgent
Merci

Posté : 11 juin 2008, 01:05
par mcorgnet
Ce que tu peux faire, c'est démarrer la lecture de ton fichier, puis si tu trouves ta balises php, tu incrémentes un tableau $php, et tu arrêtes d'incrémenter quand tu croises la balise fermante ...
Moins chiant que les regexp, que je n'encaisse pas.
Posté : 11 juin 2008, 11:09
par stagaire_titn
Merci à toi, mais comment faire celà ?
Posté : 11 juin 2008, 12:21
par Berzemus
moi j'opterais simplement pour des lookahead et des lookbehind. Le souci ça va être quand il y en aura plusieurs dans un même bloc de texte.. doit y avoir un paramètre pour ne pas le rendre avare.
Posté : 11 juin 2008, 12:33
par Ripat
Pourrais-tu donner un échantillon des cas possibles et de l'extraction souhaitée? Ça permettra de gagner du temps et quelques posts aller-retour.
Posté : 12 juin 2008, 14:26
par stagiaire_titn
[ php][ /php]
[JAVASCRIPT][/JAVASCRIPT]
... autant que l'on veut...
Posté : 12 juin 2008, 14:51
par Vurtu
moi je ferais ca en strpos ...
avec un strpos, tu récuperes la position du
un autre strpos, tu récuperes [ /php]
et apres un substr pour récupérer la chaine
Posté : 12 juin 2008, 15:58
par Ripat
[ php][ /php]
[JAVASCRIPT][/JAVASCRIPT]
... autant que l'on veut...
Balises imbriquées possibles?
Code : Tout sélectionner
[HTML]klqk mlksmlk klklqk m [JAVASCRIPT]klzk lklzdkl lk dlk [/JAVASCRIPT] kjkaj kjakj akj [/HTML]
Posté : 13 juin 2008, 00:20
par stagiaire_titn
oui, balise imbriquer (si fermé correctement)
Posté : 13 juin 2008, 00:31
par stagiaire_titn
Comme ça mais sa les affiches séparément !!
<?php
$source = "
[php] 1 php
2 php
3 html
4 php
5 php
6 html
7 html
8 html
9 html
";
function etape1($source,$balise_1,$balise_1,$balise_2)
{
preg_match_all('`\['.$balise_2.'](.+?)\[/'.$balise_1.']`si', $source, $resultat);
$nombre_resultat = count($resultat[1]); //-->> 4
$i = $nombre_resultat; //-->> 4
while($i>0)
{
$i--;
$code = ''.$code.'> '.$resultat[1][$i].'</br>';
}
return $code;
}
echo etape1($source,php,html,javascript);
?>
[/php]
donne :
Code : Tout sélectionner
> 5 php
> 4 php
> 2 php
> 1 php
> 9 html
> 8 html
> 7 html
> 6 html
> 3 html

Posté : 14 juin 2008, 21:20
par stagiaire_titn