Bonjour.
Je suis en train de créer un parseur de BBCode avec des balises imbriquées.
J'ai vu dans la documentation PHP pour la fonction preg_replace_callback une regex particulière qui permet de gérer l'imbrication.Ccependant j'ai du mal à l'adapter pour une utilisation légèrement plus complexe.

Citation Envoyé par manuel php
Exemple 1813. Exemple avec preg_replace_callback() en utilisant une structure récursive pour gérer du BB code
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
<?php
$input = "plain<div style="margin-left:40px"> deep<div style="margin-left:40px"> deeper</div>deep</div>plain";
 
function parseTagsRecursive($input)
{
 
  $regex = '#\<div style="margin-left:40px">((?:[^[]|\[(?!/?indent])|(?R))+)\</div>#';
 
  if (is_array($input)) {
    $input = '<div style="margin-left: 10px">'.$input[1].'</div>';
  }
 
  return preg_replace_callback($regex, 'parseTagsRecursive', $input);
}
 
$output = parseTagsRecursive($input);
 
echo $output;
?>
J'ai trouvé dans le manuel PHP la signification de (?R), il s'agit apparemment d'une option pour effectuer une recherche récursive.

Je ne maîtrise pas cette recherche récursive et j'ai un problème car je veux parser une balise BBCode avec un argument (par exemple je veux capturer aussi bien [indent=10] que [indent]), et en laissant la même regex il me capture seulement les tags sans argument.

Merci de m'éclairer.