BB коды
#PHP
<?php
[0-9a-z.-]{3,15}.[0-9a-z]{2,6})]#iU','<a href="mailto:\1">\1</a>',$in); // подсветка email. Пример: [ email=admin@site.ru]
В использовании bb кодов есть еще 1 тонкий момент: вырезать кусок текста и проделать над ним определенную операцию(прогнуть через функцию N). Покажу на примере подсветки ссылок. (Взято из phpbb wap v7)
#PHP
<?php
function url($in){ // основная функция для поиска url
return preg_replace_callback('#\[url\=(http\://.+)\](.+)\[/url\]|(http\://[0-9a-z\.\-]{3,15}\.[0-9a-z]{2,6}[0-9a-z/\?\.~&_\=/%\-\:\#;]{0,255})#i','url_replace',$in);
}
/*
preg_replace_callback ищет текст по регулярному выражению. В случае успеха, передает его в виде массива функции из 2 аргумента. У нас эта функция - url_replace
*/
function url_replace($m){
// 0 элемент массива - тело регулярного выражения, переданного функции
if(empty($m[3])){ // если 3 элемент массива пуст, то выводим ссылку с названием
return '<a href="'.$m[1].'">'.$m[2].'</a>';
}else{ // иначе подсвечиваем ссылку без названия(просто с адресом)
return '<a href="'.$m[3].'">'.$m[3].'</a>';
}
}
При использовании функции preg_replace_callback в классе, 2 аргумент задается через массив:
#PHP
<?php
preg_replace_callback('#тело#',array($this,'method'),$in); // метод из текущего класса
preg_replace_callback('#тело#',array('ClassName','method'),$in); // метод из класса ClassName
preg_replace_callback('#тело#',array($obj,'method'),$in); // метод, принадлежащий объекту $obj
Комментарии:
Нету комментариев для вывода...