salve,

ho iniziato ultimamente ad utilizzare le espressioni regolari perchè devo costruirmi (tramite preg_replace) una funzioncina che mi faccia il parser del BBCode.

in internet già se ne trovano parecchie, però (per i miei scopi) vorrei capire abbastanza a fondo il funzionamento.

prendiamo questa funzione :
codice:
function forumBBCode($str){
   $format_search =  array(
      '#\[b\](.*?)\[/b\]#is', 
      '#\[size=([1-9]|1[0-9]|20)\](.*?)\[/size\]#is',
      '#\[color=\#?([A-F0-9]{3}|[A-F0-9]{6})\](.*?)\[/color\]#is', 
      '#\[url=((?:ftp|https?)://.*?)\](.*?)\[/url\]#i'
   );

   $format_replace = array(
      '$1',
      '<span style="font-size: $1px;">$2</span>',
      '<span style="color: #$1;">$2</span>',
      '$2',
   );

   $str = preg_replace($format_search, $format_replace, $str);
   $str = nl2br($str);
   return $str;
}
vorrei capire bene questo :
1 - #, #is e #i a cosa servono? ho cercato in giro, ma non le trovo come "espressioni regolari".
2 - perchè ad esempio davanti a ftp|https? c'è ?: ?
3 - $1 e $2 da quanto ho capito sono variabile utilizzate da preg_replace che servono a dare l'ordine di sostituzione; in questa funzione, per esempio nello span, troverà due valori per uno stesso elemento nell'array, e li sostituirà in ordine, giusto?
4 - per esempio nella prima riga, quando troverà la corrispondenza per #\[b\](.*?)\[/b\]#is, inserirà il contenuto di dei b dentro : ma come fà a capire da dove inizia il contenuto? semplicemente tramite le parentesi di (.*?)

saluti, e grazie per l'interessamento!