Как заменить пользовательский тег bbcode, содержащий структурированный контент? - PullRequest
0 голосов
/ 10 ноября 2018

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

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

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

my name here
-
25

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

1 Ответ

0 голосов
/ 11 ноября 2018

Неясно, нужно ли вам делать простые 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>
...