Начните с просмотра списка различий между выражениями POSIX и PCRE в руководстве.
Если ваши выражения не сложны, обычно это означает, что вы можете обойтись без простого размещения разделителей вокруг параметра $pattern
и переключиться на использование семейства функций preg
. В вашем случае вы бы сделали это:
function makeClickableLinks($text)
{
$text = preg_replace('/(((f|ht){1}tp:\/\/)[-a-zA-Z0-9@:%_\+.~#?&\/\/=]+)/i',
'<a href="\\1">\\1</a>', $text);
$text = preg_replace('/([[:space:]()[{}])(www.[-a-zA-Z0-9@:%_\+.~#?&\/\/=]+)/i',
'\\1<a href="http://\\2">\\2</a>', $text);
$text = preg_replace('/([_\.0-9a-z-]+@([0-9a-z][0-9a-z-]+\.)+[a-z]{2,3})/i',
'<a href="mailto:\\1">\\1</a>', $text);
return $text;
}
Обратите внимание на символы /
вокруг шаблонов и флаг i
после разделителей. Я быстро это проверил, и он работал для основного URL. Возможно, вы захотите проверить это более тщательно.