Задать вопрос
crazy_str
@crazy_str
web-программист

Регулярка. Как определить наличие определенного фрагмента внутри [] и заменить его?

Всем привет, в регулярках я не силен поэтому вопрос такой
в wall.get приходит текст с таким содержимым
[club1|ВКонтакте API]
Как мне заменить такой текст на ссылку?
<a href="http://vk.com/club1">Вконтакте API</a>
  • Вопрос задан
  • 143 просмотра
Подписаться 2 Оценить Комментировать
Решения вопроса 1
@IceJOKER
Web/Android developer
/\[(.+)\|(.+)\]/
www.phpliveregex.com/p/fbQ
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
neluzhin
@neluzhin
Предыдущий ответ, где вам порекомендовали регулярку, похожую на сиськи, от части верный, но только от части. Проблема в том, что в квадратных скобках может быть и не ссылка на группу, паблик, мероприятие или человека. Например, [x|test] в социальной сети не преобразуется в гиперссылку и отобразится плейн текстом, а вы создадите гиперссылку, ведующую на 404-ю страницу.

Вы должны обрабатывать только гиперссылки, начинающиеся с club или id, и заканчивающиеся числом. В любом другом формате ВКонтакте гиперссылки не хранит. Правильное регулярное выражение выглядит примерно так:

/\[((?:club|id)[0-9]+)\|(.+)\]/

И вставить это добро можно так:

<a href="//vk.com/$1">$2</a>

Ну и наглядный пример на PHP для самых маленьких:

$comment = preg_replace('/\[((?:club|id)[0-9]+)\|(.+)\]/', '<a href="//vk.com/$1">$2</a>', $comment);

Следует отметить, что публичные страницы (паблики) и мероприятия (ивенты) в виде гиперссылок также имеют приставку club, а не public и event.
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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