Correctif de la page : http://php.developpez.com/sources/?page=regexp#bbcodebase
Dans la page : http://php.developpez.com/sources/?page=regexp
Vous donner la partie :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29
| $t = preg_replace_callback("![(list|liste)s*=?s*([1IaA]?)]s*(:?[*](.*)s*)+[/\1]!iUs",
create_function('$matches',
"switch($matches[2])
{
case '1':
$result = '<ol class="un">';
break;
case 'i':
$result = '<ol class="ii">';
break;
case 'I':
$result = '<ol class="II">';
break;
case 'a':
$result = '<ol class="aa">';
break;
case 'A':
$result = '<ol class="AA">';
break;
case '':
$result = '<ul>';
break;
}
for($i = 3; $i < count($matches) - 1; $i++)
{
$result.= '<li>' . $matches[$i] . '</li>';
}
return $result . '</' . substr($result, 1, 2) . 'l>';"),
$t); |
Le code est faux , pour le rendre valide il faut :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27
| $txt = preg_replace_callback("#\[(list|liste)s*=?s*([1IaA]?)\]s*(:?[*](.*)s*)+\[/\1\]#iUs",
create_function('$matches',
"switch(\$matches[2]) {
case '1':
\$result = '<ol class=\"un\">';
break;
case 'i':
\$result = '<ol class=\"ii\">';
break;
case 'I':
\$result = '<ol class=\"II\">';
break;
case 'a':
\$result = '<ol class=\"aa\">';
break;
case 'A':
\$result = '<ol class=\"AA\">';
break;
case '':
\$result = '<ul>';
break;
}
for(\$i = 3; \$i < count(\$matches) - 1; \$i++) {
\$result .= '<li>' . \$matches[\$i] . '</li>';
}
return \$result . '</' . substr(\$result, 1, 2) . 'l>';"),
$txt); |
Se sont 2 erreurs bêtes :
- les " qui ne sont pas backslaché
- les [] du début dans le regex qui ne le sont pas aussi.
Edition :
le regex des titre est faux aussi :
Code:
"![(h|title|titre)s*=?s*([2-4])](.+)[/\1[2-7]?]!iU"
au lieu de :
Code:
'#\[(h|title|titre)\s*=?\s*([1-4])\](.+)\[/\\1(?:\\2)?\]#i'