--- spam_filter_url.module.orig	2010-02-21 00:39:43.000000000 +0100
+++ spam_filter_url.module	2010-02-21 00:40:15.000000000 +0100
@@ -66,11 +66,16 @@ function _spam_filter_url_extract($conte
       }
     }
 
-    // TODO: Improve this matching.  We don't actually extract mailto: urls.
-    $URI = "(http://|https://|ftp://|mailto:)";
-    // Find all urls in content.
-    preg_match_all("!(<p>|[ \n\r\t\(]*)($URI([a-zA-Z0-9@:%_~#?&=.,/;-]*[a-zA-Z0-9@:%_~#&=/;-]))([.,?]?)(?=(</p>|[ \n\r\t\)]*))!i", $string, $matches);
-    foreach ($matches[2] as $spam_filter_url) {
+    $URI = "(http://|https://|ftp://|mailto:|smb://|afp://|file://|gopher://|news://|ssl://|sslv2://|sslv3://|tls://|tcp://|udp://)";
+    // Find all urls in content. Code based on _filter_url().
+    // Match absolute URLs.
+    preg_match_all("`(<p>|<li>|<br\s*/?>|[ \n\r\t\(])($URI([a-zA-Z0-9@:%_+*~#?&=.,/;-]*[a-zA-Z0-9@:%_+*~#&=/;-]))([.,?!]*?)(?=(</p>|</li>|<br\s*/?>|[ \n\r\t\)]))`i", $string, $matches_absolute);
+    // Match e-mail addresses.
+    preg_match_all("`(<p>|<li>|<br\s*/?>|[ \n\r\t\(])([A-Za-z0-9._-]+@[A-Za-z0-9._+-]+\.[A-Za-z]{2,4})([.,?!]*?)(?=(</p>|</li>|<br\s*/?>|[ \n\r\t\)]))`i", $string, $matches_email);
+    // Match www domains/addresses.
+    preg_match_all("`(<p>|<li>|[ \n\r\t\(])(www\.[a-zA-Z0-9@:%_+*~#?&=.,/;-]*[a-zA-Z0-9@:%_+~#\&=/;-])([.,?!]*?)(?=(</p>|</li>|<br\s*/?>|[ \n\r\t\)]))`i", $string, $matches_www);
+    $matches = array_merge($matches_absolute[2], $matches_email[2], $matches_www[2]);
+    foreach ($matches as $spam_filter_url) {
       $spam_filter_url = preg_replace("'$URI'", '', $spam_filter_url);
       // get full domain (ie www.sample.com)
       preg_match("/^()?([^\/\"\']+)/i", $spam_filter_url, $domain);
