regex php - как заменить ссылки с ВК обёрнутые в скобки на html-ссылки

недавно VK обновил Callback API для групп и теперь при запросе постов со стены, ссылки в постах возвращаются обёрнутые в скобки с тегом alias:
пример для ссылки www.twitch.tv/test - [#alias|www.twitch.tv/test|www.twitch.tv/test]

мне нужно на языке PHP каким-то образом, как я понимаю с помощью регулярки, извлечь все такие "теги" и заменить на нужные мне html-теги, вот пример текста который возвращается от ВК:

test 
[#alias|www.youtube.com/watch?v=test|www.youtube.com/watch?v=test] abc
[#alias|kick.com/test|https://kick.com/test] zxc
[#alias|www.twitch.tv/test|www.twitch.tv/test]
текст текст

мне нужно его преобразовать в html-код вида:

test 
<a href='www.youtube.com/watch?v=test'>www.youtube.com/watch?v=test</a> abc
<a href='https://kick.com/test'>https://kick.com/test</a> zxc
<a href='www.twitch.tv/test'>www.twitch.tv/test</a>
текст текст

пробовал без регулярки простым парсингом через strpos искать и заменять ссылки, но работает криво, нужна помощь с составлением регулярки для замены


Ответы (1 шт):

Автор решения: Daniel Protopopov

Берём регулярку для ссылок отсюда и составляем по частям:

  1. Альяс - ^\[\#alias\|
  2. Адрес - (?'url'(https:\/\/)?(www\.)?[-a-zA-Z0-9@:%._\+~#=]{1,256}\.[a-zA-Z0-9()]{1,6}\b([-a-zA-Z0-9()@:%_\+.~#?&\/=]*))
  3. Разделитель - \|
  4. Ссылка - (?'link'(https:\/\/)?(www\.)?[-a-zA-Z0-9@:%._\+~#=]{1,256}\.[a-zA-Z0-9()]{1,6}\b([-a-zA-Z0-9()@:%_\+.~#?&\/=]*))
  5. Закрывающий - \]
  6. Текст - (?'text'.*)$

Итого получается

^\[\#alias\|(?'url'(https:\/\/)?(www\.)?[-a-zA-Z0-9@:%._\+~#=]{1,256}\.[a-zA-Z0-9()]{1,6}\b([-a-zA-Z0-9()@:%_\+.~#?&\/=]*))\|(?'link'(https:\/\/)?(www\.)?[-a-zA-Z0-9@:%._\+~#=]{1,256}\.[a-zA-Z0-9()]{1,6}\b([-a-zA-Z0-9()@:%_\+.~#?&\/=]*))\](?'text'.*)$

Не понятно что за текст в самом начале, оставляю это вам.

→ Ссылка