Hallo bleicher,
Du solltest beim Regex die schliessende "eckige Klammer" von [url] auch maskieren.
Also: "/[url:(.+)](.+)[/url]/"
Übrigens solltest du den Regex folgendermassen anpassen:
$str = preg_replace('#\[url=(.*)\](.*)\[/url\]#Uis', '<a href="\1">\2</a>', $str);
So findet der Regex die kleinst Möglichen Übereinstimmungen.
Dein Regex würde einen String mit 2 Links darinen falsch bearbeiten.
Grüsse,
Lupus