справка preg_replace — необходимо заменить [список] .. [ / list] на HTML

#php #html #regex

#php #HTML #регулярное выражение

Вопрос:

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

Я хочу заменить текст следующим образом

 [list]line 0
line 1
line 2
[/list]
  

с помощью

 <ul><li>line 0</li>
<li>line 1</li>
<li>line 2</li>
</ul>
  

Он может появляться в строке несколько раз, и было бы здорово, если бы он мог избежать добавления пустых элементов списка.

Ответ №1:

Вот мой специальный BBParser. Потратил на это целую вечность.

http://pastebin.com/3MRYRd8k

Используйте это следующим образом:

 $parse = new bbParse();
$pageContent = $parse->bbtohtml($dbContent);
  

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

1. Спасибо, он заменяет тег [/list], но тег [list] остается таким, какой он есть. Когда я удаляю символы r n, он также заменяет тег [list], но он не вставляет <li></li> вокруг каждой строки между этими тегами.

2. Хорошо, я разобрался, он ожидает [*] в начале каждой строки. Это действительно имеет смысл. Спасибо.

3. Как бы я использовал это дважды в одном PHP-файле? Если я пытаюсь использовать его дважды, он сообщает о неустранимой ошибке: не удается повторно объявить htmltags() (ранее объявленный в bbparser.php:85)

4. Переместите функцию HtmlTags из функции.

5. Спасибо, но затем там было сказано то же самое о bbtohtml (), поэтому я превратил его в обычную функцию. Я терплю неудачу в ООП. 🙂

Ответ №2:

 preg_replace('#[list](.*?)[/list]', $data, $list);
$list[1] = explode("n", $list);
$html = '<ul>';

foreach($list[1] as $li){
   $html .= '<li>'.$li.'</li>';
}
$html .= '</ul>';