Задать вопрос

Как составить регулярное выражения для замены текста на ссылку (вк)?

Есть в тексте вставки из вк. Примеры:
[id1|Паша][club1231|Test][club1231222|Тестовая страница]

и тд. Их нужно заменить на (пример):
<a href="ссылка/id1">Паша</a>
Прочитал, что и как в регулярках, погуглил, но все равно не получается... Составил с помощью какого-то сервиса регулярку, но она не подходит...
  • Вопрос задан
  • 680 просмотров
Подписаться 1 Средний 2 комментария
Решения вопроса 1
@STEM1 Автор вопроса
Ответили на stackoverflow.
/\[(.+)\|(.+)\]/U
Ответ написан
Пригласить эксперта
Ответы на вопрос 3
Moskus
@Moskus
Сервис по составлению регулярок не заменит понимания синтаксиса.
Искать \[([^|]+)|([^\]]+)\] заменять на <a href="https://vk.com/$1">$2</a>
Ответ написан
Immortal_pony
@Immortal_pony
Можно и безо всяких регулярок.
Реализация упрощена, можете ее доработать сами с учетом возможных ошибок - пропущен символ "|" внутри шорткода или отсутствие открывающей/закрывающецй скобки.

function replaceShortcodesWithLinks($text) {
    $shotcodeQuantity = min([substr_count($text, "["), substr_count($text, "]")]);
    $offset = 0;

    for ($i=0; $i<$shotcodeQuantity; $i++) {
        $openBracePos = strpos($text, "[", $offset);
        $closeBracePos = strpos($text, "]", $openBracePos);
        $shortcode = substr($text, $openBracePos+1, $closeBracePos-$openBracePos-1);
        list($id, $title) = explode("|", $shortcode);
        $link = "<a href='https://vk.com/{$id}'>{$title}</a>";
        $text = substr($text, 0, $openBracePos) . $link . substr($text, $closeBracePos+1);
        $offset = $closeBracePos + strlen($link);
    }
    
    return $text;
}
Ответ написан
Комментировать
vmpartner
@vmpartner
In code we trust
https://regexr.com/3ofjs

(.+)\s+?\[(.+)\|(.+)\]
Бла бла бла [durov|Паша]
$1 <a href="https://vk.com/$2">$3</a>


5adf92d6482a9850821058.png
Ответ написан
Ваш ответ на вопрос

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

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