Bonjour,
je suis actuellement en train d'essayer de comprendre comment fonctionne un moteur de templates et pour me faire la main j'ai pris le moteur de PHPLib (fichier template.inc) ; dans la fonction set_block() dont le rôle est de faire un travail de remplacement on trouve :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
   $str = $this->get_var($parent);
    $reg = "/[ \t]*<!--\s+BEGIN $varname\s+-->\s*?\n?(\s*.*?\n?)\s*<!--\s+END $varname\s+-->\s*?\n?/sm";
    preg_match_all($reg, $str, $m);
 
    if (!isset($m[1][0])) {
      $this->halt("set_block: unable to set block $varname.");
      return false;
    }
    $str = preg_replace($reg, "{" . $name . "}", $str);
    $this->set_var($varname, $m[1][0]);
    $this->set_var($parent, $str);
$var_name est une variable passée en paramètre à set_block.

Je n'arrive pas à comprendre entièrement le sens de 2 parties de l'expression régulière : \s*?\n?(\s*.*?\n?)\s* et \s*?\n?/sm .
J'ai pourtant bien fouiné dans les docs php ...

Quelqu'un pourrait-il m'expliquer ce qu'elles matchent ?
Merci par avance