Hello

j'essaie d'écrire un parser qui dans un fichier texte doit traiter tout les éléments entre {: et :} d'une façon particulière.

J'essaie donc dans mon texte de récupérer tout ce qui précèdre {: et ce qui est compris entre {: et :}

123 {:exemple:} 456 => j'aimerais en retirer au final 123 + exemple + 456.

mon code :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
 
		$reg = '%(([^\{]|([^\{][^\:])|(\{$))*)((\{\:([^\:]|([^\:][^\}])|(\:$))*\:\})?)%';
		//print($reg);
 
		preg_match_all($reg, $template, &$matches);
 
		print ('<pre>');
		foreach ($matches AS $match) {
			print_r($match);
			print ("\n");
		}
		print ('</pre>');
Ce qui avec comme texte (variable $template)

1 2 3 {:resx:test:test:} 4 5 6 1
m'affiche

Array
(
[0] => 1 2 3 {:resx:test:test:}
[1] => 4 5 6 1
[2] =>
)

Array
(
[0] => 1 2 3
[1] => 4 5 6 1
[2] =>
)

Array
(
[0] =>
[1] => 1
[2] =>
)

Array
(
[0] =>
[1] =>
[2] =>
)

Array
(
[0] =>
[1] =>
[2] =>
)

Array
(
[0] => {:resx:test:test:}
[1] =>
[2] =>
)

Array
(
[0] => {:resx:test:test:}
[1] =>
[2] =>
)

Array
(
[0] => t
[1] =>
[2] =>
)

Array
(
[0] => t:
[1] =>
[2] =>
)

Array
(
[0] =>
[1] =>
[2] =>
)


Comment est-il donc possible que dans un array de match, j'ai des éléments d'index supérieur à 0 (groupes capturés) qui ne fassent même pas partie de l'élément 0 (match total) ?

Pouvez-vous m'aider ?