Создать оглавление из определенных тегов BBCode в строке

#php #bbcode

#php #bbcode

Вопрос:

у меня есть этот код в качестве моего bbcode

 [box=title|id]
text
[/box]
  

не я хочу php-код, который учитывает [box] tage в моем коде и перечисляет его как таблицу содержимого

пример

 [box=overview of the code|overview]
texttexttext
[/box]

[box=download of the code|download]
texttexttext
[/box]
  

я хочу, чтобы код создавал карту или таблицу содержимого типа <a href="#id">title</a>

 <a href="#overview">overview of the code</a>
<a href="#download">download of the code</a>
  

Комментарии:

1. Итак, какие у вас вопросы? Мы здесь не для того, чтобы писать код, который вы хотите для вас, мы здесь, чтобы помочь, когда вы застряли.

Ответ №1:

Напишите синтаксический анализатор. Вы могли бы использовать регулярные выражения, но это становится уродливым.

Я думаю, что это примерно настолько конкретно, насколько я могу быть, без необходимости писать ни одной строки кода: D

Комментарии:

1. моя проблема с регулярными выражениями в php, пожалуйста, попробуйте мне помочь

2. Я знаю, именно поэтому вам следует написать синтаксический анализатор 😉 Синтаксические анализаторы, как правило, также быстрее, чем регулярные выражения.

Ответ №2:

Вы ищете preg_replace в вашей строке:

 preg_replace( "/[box=([^|]*)|(w*)][sw]*[/box]/", "<a href='#$2'>$1></a>", $yourString );
  

Скобки в регулярном выражении «захватят» строку внутри, и вы сможете ссылаться на них с помощью $index (отсюда $ 1 и $ 2 в разделе замены кода).

Комментарии:

1. Если вы передадите всю вашу строку BBCode целиком, она вернет строку из всех тегов <a>, как вы и просили.