@turbomen24

Как заменить отметки/теги (#tag или @user_name) на ссылки с помощью Regex?

К примеру, есть текст поста, в котором есть отметки (@username, @user_login) или теги (#tag, #second_tag).
Нужно их заменять на html-ссылки:
@user_login на <a href='/users/user_login'>@user_login</a>.
  • Вопрос задан
  • 105 просмотров
Решения вопроса 1
toxa82
@toxa82
$text = 'Example text with @user_login123 and #tag';
$res = preg_replace('/@([\w]+)/ius', '<a href="/users/$1">@$1</a>', $text);
$res = preg_replace('/#([\w]+)/ius', '<a href="/tags/$1">#$1</a>', $res);
var_dump($text, $res);

string 'Example text with @user_login123 and #tag' (length=41)
string 'Example text with <a href="/users/user_login123">@user_login123</a> and <a href="/tags/tag">#tag</a>' (length=100)
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@turbomen24 Автор вопроса
Спасибо toxa82 за помощь, вот код, который берёт текст с тегами, отметками, ссылками и адресами email, и превращает всё это в html-ссылки.
Если кому-то пригодится, публикую здесь полную версию с исправлениями:

$text = preg_replace("/(\b(https?|ftp):\/\/[-A-Z0-9+&@#\/%?=~_|!:,.;]*[-A-Z0-9+&@#\/%=~_|])/is", '<a href="$1" target="_blank">$1</a>', $text);
$text = preg_replace("/(^|[^\/])(www\.[\S]+(\b|$))/is", '<a href="http://$2" target="_blank">$2</a>', $text);
$text = preg_replace('/(?<=\A|\W)@([\w]+)/ius', '<a href="/users/$1">@$1</a>', $text);
$text = preg_replace('/#([\w]+)/ius', '<a href="/tags/$1">#$1</a>', $text);
$text = preg_replace("/(([a-zA-Z0-9\-\_\.])+@[a-zA-Z\_]+?(\.[a-zA-Z]{2,6})+)/is", '<a href="mailto:$1">$1</a>', $text);
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы