Данный способ очень прост и решает одну задачу - замену элементов bb кода по шаблону средствами регулярных выражений из первого массива на html аналоги из второго массива.
$text = "Простой [b]пример[/b]"; function bbcode($var) { $search = array( '/\[b\](.*?)\[\/b\]/is', '/\[i\](.*?)\[\/i\]/is', '/\[u\](.*?)\[\/u\]/is', '/\[img\](.*?)\[\/img\]/is', '/\[url\](.*?)\[\/url\]/is', '/\[url\=(.*?)\](.*?)\[\/url\]/is' ); $replace = array( '<strong>$1</strong>', '<em>$1</em>', '<u>$1</u>', '<img src="$1" />', '<a href="$1">$1</a>', '<a href="$1">$2</a>' ); $result = preg_replace ($search, $replace, $result); return $result; } echo bbcode($text);
Результат будет следующий: Простой пример
Допустим у нас имеется плагин "slick" работающий на jQuery или любой другой (обычно по структуре они не отличаются). Скелет таких плагинов содержит следующий html код:
<div class="gallery"> <div> <img src="/photo/1.jpg"> </div> <div> <img src="/photo/2.jpg"> </div> <div> <img src="/photo/3.jpg"> </div> <div> <img src="/photo/4.jpg"> </div> </div>
Предположим, ссылки мы храним в MySQL БД, сделаем некий inject-вставку в текст при помощи BB-кодов, где "IMG" будет генерироваться циклом из БД. В итоге мы должны получить следующее:
[gallery] [img=Описание фотографии]/photo/1.jpg[/img] [img]/photo/2.jpg[/img] [img]/photo/3.jpg[/img] [img]/photo/4.jpg[/img] [/gallery]
Далее идея будет состоять в том, чтобы заменять "gallery" и "img" тегами "<div class='gallery_name'>" и "<img>".
$text = " текст текст текст текст текст текст текст [gallery] [img=Описание фотографии]/photo/1.jpg[/img] [img]/photo/2.jpg[/img] [img]/photo/3.jpg[/img] [img]/photo/4.jpg[/img] [/gallery] текст текст "; echo gallery($text); function gallery($var) { $search = array( '/\[gallery\](.*?)\[\/gallery\]/is', '/\[img\](.*?)\[\/img\]/is', '/\[img\=(.*?)\](.*?)\[\/img\]/is'); $replace = array( '<div class="gallery">$1</div>', '<img src="$1" />', '<img alt="$1" src="$2" />'); $var = preg_replace($search, $replace, $var); return $var; }
Этот вариант будет удобен, когда мы захотим сменить плагин на какой-нибудь другой и нам не нужно будет переименовывать блок gallery в БД, просто меняем класс регулярным выражением.
function gallery($var) { $search = array( '~\\G (?: [^\\[<]+ | <pre.*?>.*?</pre> | (?!\\[gallery). )*+\\K \\[gallery\\](.*?)\\[/gallery\\]~isx', '~\\G (?: [^\\[<]+ | <pre.*?>.*?</pre> | (?!\\[img). )*+\\K \\[img\\](.*?)\\[/img\\]~isx', '/(?:<br[^>]*>\s*)+/i' ); $replace = array( '<div class="slick_gallery">$1</div>', '<div><img src="$1" /></div>', '' ); $var = preg_replace($search, $replace, $var); return $var; } echo gallery($text);