Как заменить пользовательский тег bbcode, содержащий структурированный контент?

У меня есть строка как эта: "[dr]azAZ09-09[/dr]"

Пример: [dr]my name here-25[/dr]

Я хочу получить все элементы:

my name here
-
25

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

-2

Решение

Неясно, нужно ли делать простую preg_replace() или же preg_replace_callback() (потому что ты «нужно делать другие вещи в коде PHP«).

Лучшее решение, которое я могу предложить вам сейчас, это использовать этот шаблон, который требует [dr]|[/dr] пометка и - разделитель подстроки, за которым следуют одна или несколько цифр.

Шаблон: (демонстрация)

#  ⬐⬐⬐------------⬐⬐⬐⬐--------------- match opening and closing tags
#  ↓↓↓↓↓           ↓↓↓↓↓↓↓
~\[dr](.+?)-(\d+)\[/dr]~
#        ↑↑↑   ⬑⬑⬑---------------------- capture one or more digits
#        ⬑⬑----------------------------- capture one or more of any character

С этими двумя захваченными подстроками вы можете использовать preg_replace() генерировать новую строку динамических замен.

Код: (демонстрация)

$bbcode = '[dr]my name here-25[/dr]';
echo preg_replace('~\[dr](.+?)-(\d+)\[/dr]~', '<div>Reply to: <a href="user.php?id=$2">$1</a></div>', $bbcode);

Выход:

<div>Reply to: <a href="user.php?id=25">my name here</a></div>
0

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector