$text = preg_replace("~(?<!\[url\])((http|https|ftp|ftps)://)([а-яА-Яa-zA-Z.\/0-9-+_?=&%\#;])+~siu", '[url]$0[/url]', $text);
(?<!\[url\])
(?<!\[url\])
не помогает. ~(?<!\])((http|https|ftp|ftps)://)([а-яА-Яa-zA-Z.\/0-9-+_?=&%\#;])+(?!\[/url\])~siu