Вы должны использовать preg_replace_callback()
, чтобы сделать это проще.
Попробуйте:
$string = 'This is a message with multiple links: ';
$string .= 'http://google.com ';
$string .= 'http://twitter.com ';
$string .= 'http://google.com/qwerty ';
$string .= 'http://facebook.com ';
$string .= 'http://google.com/ytrewq ';
$final_string = preg_replace_callback(
"/(^|\s)((http(s)?\:\/\/)?[\w-]+(\.[\w-]+)+[^\s]*[^.,\s])/",
function ( $matches ) {
$link = trim( $matches[0] );
return " <a href='$link'>$link</a>";
},
$string
);
echo $final_string;
Я изменил способ, которым вы объявили $string
, просто чтобы его было легче читать, но это не имеет значения.
Также обратите внимание, что вам не нужны никакие флаги в вашем регулярном выражении, такие как u
, который вы используете. Что, кстати, неверно, так как должно быть U
, а не u
.
Надеюсь, это поможет.