|
Publicité ' | |||||||||||||||||||||||
|
|
#1 | ||
|
Invité régulier
![]() Inscription : février 2007 Messages : 17 ![]() |
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 :
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 |
||
|
|
00
|
|
|
#2 |
|
Membre éprouvé
![]() Inscription : février 2007 Messages : 475 ![]() |
\s*?\n?(\s*.*?\n?)\s*
0 ou plusieurs espaces, 0 ou 1 nouvelle ligne, ensuite on capture: (0 ou plusieurs espaces, 0 ou plusieurs caractères quelconques, 0 ou 1 nouvelle ligne), 0 ou plusieurs espaces \s*?\n? 0 ou plusieurs espaces, 0 ou 1 nouvelle ligne Le tout saupoudré d'un peu d'ungreedy (*?) /sm s: dot all. Le '.' matche tout y compris une nouvelle ligne (\n) m: multiline. ^ et $ fonctionnent pour des nouvelles lignes. (inutile dans le pattern tel que tu l'as copié/collé) |
|
|
00
|
|
|
#3 |
|
Invité régulier
![]() Inscription : février 2007 Messages : 17 ![]() |
Merci goopz, je commence à mieux comprendre
mais il y a tjrs qque chose que j'ai du mal à voir : le "?" doit toujours encadrer l'élément facultatif, c'est bien ça ? et c'est pour ça que l'on a : ?\n? (un vieux souvenir des expressions régulières posix m'aurait fait écrire simplement \n? pour exprimer "\n 0 ou 1 fois") Autre chose, toujours à propos du "?" : (?:[a-z]+['\s])? : j'ai trouvé dans le manuel d'initiation aux expr. reg de Developpez.com, que cela signifie : 1 ou plusieurs lettres suivie(s) soit d'1 espace soit d'une ' et ce bloc est facultatif. Ok je comprends, sauf pour la syntaxe : "(?:" et ")?" sont les marqueurs qu'il faut tjrs utiliser pour encadrer un bloc facultatif c'est ça ? Merci encore |
|
|
00
|
|
|
#4 | ||
![]() ![]() Développeur Web Inscription : août 2006 Messages : 2 700 ![]() |
Citation:
Citation:
Ainsi, tu ne la retrouvera pas dans le tableau des résultats. Cette option est smart, mais facultative : tu peux très bien capturer et ne pas prendre en compte cette capture. J'imagine que c'est aussi un peu moins performant, mais de pas grand chose... |
||
|
|
00
|
|
|
#5 |
|
Invité régulier
![]() Inscription : février 2007 Messages : 17 ![]() |
ok, merci jml94 ;
je vois qu'il me reste du boulot pour saisir toutes les subtilités des regex ... merci. |
|
|
00
|
|
|
#6 | |
![]() ![]() Développeur Web Inscription : août 2006 Messages : 2 700 ![]() |
Citation:
T'façons, goodpz l'avait très bien dit juste avant... |
|
|
|
00
|
Copyright © 2000-2012 - www.developpez.com