Есть простая регулярка для обертывания ссылок в тексте: Код (PHP): preg_replace"'((?:http|https):\/\/[^\s]+)'is", "<a href=\"\\1\" />\\1</a>"); Я не хочу чтобы она обертывала ссылки, которые находятся внутри тегов: Код (Text): [url]ссылка[/url] [url=ссылка]ссылка[/url] Как мне добавить в нее эти исключения?
одной регуляркой выбрать текст ВНЕ тегов а второй уже вашей - произвести замену. одной регуляркой почти нереально, либо очень ресурсоемко
Вот как надо быдлокодить, учитесь, нубы. Код (PHP): function do_magic_links($text) { //это говнокод $bbcode = array( '[url]http://' => 'ALfk1jla7FGJOIghO3AGHoaIHf0g://', '[url]https://' => 'ALfk1jla7FGJOIghO3AGHoaIHf1g://', '[url=http://' => 'ALfk1jla7FGJOIghO3AGHoaIHf2g://', '[url=https://' => 'ALfk1jla7FGJOIghO3AGHoaIHf3g://', '[img]http://' => 'ALfk1jla7FGJOIghO3AGHoaIHf4g://', '[img]https://' => 'ALfk1jla7FGJOIghO3AGHoaIHf5g://' ); $text=str_replace(array_keys($bbcode), array_values($bbcode), $text); $text=preg_replace("'((?:http|https):\/\/[^\s]+)'is", "[url]\\1[/url]", $text); $text=str_replace(array_values($bbcode), array_keys($bbcode), $text); return $text; }