diff --git a/modules/filter/filter.module b/modules/filter/filter.module
index d0359c182b2..aa429a0a16b 100644
--- a/modules/filter/filter.module
+++ b/modules/filter/filter.module
@@ -1117,13 +1117,13 @@ function _filter_url($text, $format) {
$text = ' '. $text .' ';
// Match absolute URLs.
- $text = preg_replace_callback("!(
|
|
|[ \n\r\t\(])((http://|https://|ftp://|mailto:|smb://|afp://|file://|gopher://|news://|ssl://|sslv2://|sslv3://|tls://|tcp://|udp://)([a-zA-Z0-9@:%_+*~#?&=.,/;-]*[a-zA-Z0-9@:%_+*~#&=/;-]))([.,?]?)(?=(||
|[ \n\r\t\)]))!i", '_filter_url_parse_full_links', $text);
+ $text = preg_replace_callback("`(|
|
|[ \n\r\t\(])((http://|https://|ftp://|mailto:|smb://|afp://|file://|gopher://|news://|ssl://|sslv2://|sslv3://|tls://|tcp://|udp://)([a-zA-Z0-9@:%_+*~#?&=.,/;-]*[a-zA-Z0-9@:%_+*~#&=/;-]))([.,?!]*?)(?=(||
|[ \n\r\t\)]))`i", '_filter_url_parse_full_links', $text);
// Match e-mail addresses.
- $text = preg_replace("!(|
|
|[ \n\r\t\(])([A-Za-z0-9._-]+@[A-Za-z0-9._+-]+\.[A-Za-z]{2,4})([.,?]?)(?=(||
|[ \n\r\t\)]))!i", '\1\2\3', $text);
+ $text = preg_replace("`(|
|
|[ \n\r\t\(])([A-Za-z0-9._-]+@[A-Za-z0-9._+-]+\.[A-Za-z]{2,4})([.,?!]*?)(?=(||
|[ \n\r\t\)]))`i", '\1\2\3', $text);
// Match www domains/addresses.
- $text = preg_replace_callback("!(|
|[ \n\r\t\(])(www\.[a-zA-Z0-9@:%_+*~#?&=.,/;-]*[a-zA-Z0-9@:%_+~#\&=/;-])([.,?]?)(?=(||
|[ \n\r\t\)]))!i", '_filter_url_parse_partial_links', $text);
+ $text = preg_replace_callback("`(|
|[ \n\r\t\(])(www\.[a-zA-Z0-9@:%_+*~#?&=.,/;-]*[a-zA-Z0-9@:%_+~#\&=/;-])([.,?!]*?)(?=(||
|[ \n\r\t\)]))`i", '_filter_url_parse_partial_links', $text);
$text = substr($text, 1, -1);
return $text;