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 шт):
Берём регулярку для ссылок отсюда и составляем по частям:
- Альяс -
^\[\#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'.*)$
Итого получается
^\[\#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'.*)$
Не понятно что за текст в самом начале, оставляю это вам.