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 :oops:

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
Bon mon stage est fini, je n'est pas pu le faire... tempi... j'ai eu 16/20 :cry: :cry: :cry: :cry: :cry:

juste comme ça, est-ce possible ?

Merci quand même :cry: