$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