нужна помощь с регуляркой [list]

82
24 марта 2022, 16:00

пробую написать свой парсер для замещения на теги. и вот проблема. нужно вот это

[list]
[*] hello
[*] привет
[/list]

сделать с так, чтобы я мог заменить это на такой текст.

<ul>
<li> hello </li>
<li> привет </li>
</ul>

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

\[list\]{1}(\[*\]([a-z]+){0,})

и ничего не определяется, я пока плохо знаю регулярки. можно ли вообще заменить как я хочу?

Обновлено.

я составил такую регулярку, вроде правильная. вот какая получилась.

((\[list\]){1})*((\[[*]\]{1}.*)([a-z]+)*){0,}((\[\/list\]){1})*

теперь как мне получить доступ к элементу, который находится после [*]?

Answer 1

Вот пример

$re = '/\[list\](.*?)\[\/list\]/s';
$re_items='/\[\*\]\s(.*?)$/m';
$str = '
[list]
[*] hello
[*] привет
[/list]
[list]
[*] hello1
[*] привет2
[/list]';
preg_match_all($re, $str, $matches, PREG_PATTERN_ORDER);
if ( count($matches) == 0 ) {
        echo "Matched nothing!\n";
    } else {
        foreach ($matches[1] as $val) {
          preg_match_all($re_items, $val, $items, PREG_PATTERN_ORDER, 0);
          echo "<ul>\n";
            foreach ($items[1] as $item){
              echo "<li>$item</li>\n";  

            }
          echo "<\ul>\n";
        }
    }

Вывод

<ul>
<li>hello
</li>
<li>привет
</li>
</ul>
<ul>
<li>hello1
</li>
<li>привет2
</li>
</ul>

Вообще у вас вариант BBcode. Лучше использовать готовый парсер.

Более подробно о BBcode.

READ ALSO
Мини скрипт новостной ленты на PHP

Мини скрипт новостной ленты на PHP

Решила создать мини скрипт новостной ленты на phpВот содержимое файла news

125
Сущность в Symfony 4.3 генерирует ошибку 502 Bad Gateway

Сущность в Symfony 4.3 генерирует ошибку 502 Bad Gateway

Разрабатываю локально небольшой проект на symfonyИспользую докер

126
Не загружается файловая система в Twig

Не загружается файловая система в Twig

Да автозагрузчик установлен

72