@Wolfak

Регулярные выражения для создания хештегов в PHP?

Доброе время суток. Появилась необходимость в создании хештегов для сайта.
С регулярными выражениями у меня не всегда все гладко, поэтому обратился за помощью в интернете и по примеру сделал вот такие выражения для хештегов и для внешниех ссылок:
$Post_Text = preg_replace("~(http|https|ftp|ftps)://(.*?)(\s|\n|[,.?!](\s|\n)|$)~", '<noindex><nofollow><a href="http://site.ru/link=$2" target="_blank">$2</a></nofollow></noindex>$3', $Post_Text);
$Post_Text = preg_replace("/#([\S]+)/", "<a href=\"http://site.ru/posts&search=\\1\">#\\1</a>", $Post_Text);
$Post_Text = preg_replace("/@([\S]+)/", "<a href=\"http://site.ru/\\1\">@\\1</a>", $Post_Text);


Но у данных выражений есть огромный минус. Если написать такие теги они будут выводиться с ошибкой:
#abs@as
@asfgas#asgasg
@sag@asfas
#asfasf#asgas


Как исправить данные выражения или же какие дописать условия, чтобы таких ошибок не было и все работало? Спасибо за помощь!
  • Вопрос задан
  • 783 просмотра
Пригласить эксперта
Ответы на вопрос 2
In4in
@In4in
°•× JavaScript Developer ^_^ ו°
Конструкция [^] вам в помощь.

Ну ладно, жмите сюда
$Post_Text = preg_replace("/#([^\b#@]+)/", "<a href='http://site.ru/posts&search=$1'>#$1</a>", $Post_Text);
$Post_Text = preg_replace("/@([^\b#@]+)/", "<a href='http://site.ru/$1'>@$1</a>", $Post_Text);

Ответ написан
@heartdevil
плыву как воздушный шарик
$Post_Text = preg_replace('/(?:^|\s)#([\S]+)/gim', "<a href=\"http://site.ru/posts&search=\\1\">#\\1</a>", $Post_Text);
$Post_Text = preg_replace('/(?:^|\s)@([\S]+)/gim', "<a href=\"http://site.ru/\\1\">@\\1</a>", $Post_Text);
Ответ написан
Ваш ответ на вопрос

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

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