Dans la page : http://php.developpez.com/sources/?page=regexp
Vous donner la partie :
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
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 : 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
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 : Sélectionner tout - Visualiser dans une fenêtre à part
"![(h|title|titre)s*=?s*([2-4])](.+)[/\1[2-7]?]!iU"
au lieu de :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
'#\[(h|title|titre)\s*=?\s*([1-4])\](.+)\[/\\1(?:\\2)?\]#i'