<?php
$depth = 0;
$traverse = [0, 0, 0];
$tags = ['table', 'row', 'cell'];
$regex = [];
foreach ($tags as $key=>$tag)
$regex[$key] = '/(\['.$tag.'((?:[\s\.\#]+[a-z]*)*)\]+[^\[]((?:.|\s)*?(?=(?:\['.$tag.')|$)))/';
echo var_export($tags),PHP_EOL;
echo var_export($regex),PHP_EOL;
$content = "[table]
[row]
[cell]
[cell]
[row]
[cell]
[cell]
[table]
[row]
[row]
[cell]
[row]
";
$f_parse = function($matches) use (&$depth, &$traverse, $tags, $regex, &$f_parse) {
$traverse[++$depth]++;
/*
echo "$depth | ${traverse[$depth]} | $tags, ${regex[$depth]}", PHP_EOL;
$result = "";
if ($depth < count($regex))
{
preg_replace_callback(
$regex[$depth],
$f_parse,
$matches[0]
);
}
return $result;*/
echo $depth, ' | ', $traverse[$depth], ' | ', PHP_EOL;
$traverse[$depth--]--;
return $depth;
};
$content = preg_replace_callback(
$regex[$depth],
$f_parse,
$content
);
echo $content, "\n";
?>
preferences:
56.14 ms | 402 KiB | 5 Q