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!