OK, I'll bite. How about (before processing markup):
$content =~ s~<font color=red>(?< !\[url[=\]])</font color=red><font color=purple>\b</font color=purple>(https?://<font color=blue>[^\s<>"'{}\[\]]*</font color=blue><font color=green>[^,.!\s<>"'{}\[\]]</font color=green>)~\[url\]$1\[/url\]~g;
The goal is to replace
http://wherever by [url]http://wherever[/url].
The red part keeps us from match something where the http:// (or
https://) is already preceeded by [url] or [url=
The purple makes sure we have a "word boundary" before the http:
The blue matches a bunch of characters which may not contain: whitespace < > " ' { } [ ]
The green matches the last character in the URL. It is not allowed to match a comma, period, or explanation point (in addition to the characters outlawed by the blue part). This will exclude punctuation which is intended to end a sentence from the URL (with the exception of a sentence that ends in a question mark--we really can't do anything about that since it is hard to know if it should be part of the URL).
Bill Dimm, <A target="_blank" HREF=http://MagPortal.com/>MagPortal.com</A> - <font color=red>free</font color=red> feeds for your site.<P ID="edit"><FONT SIZE=-1><EM>Edited by BillD on 04/15/01 01:59 PM (server time).</EM></FONT>