Аватар для Raisin Zn
101 / 100 / 51
Регистрация: 19.04.2011
Сообщений: 965

Парсер вложенных спойлеров

13.06.2017, 13:06. Показов 1383. Ответов 5
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Доброго времени суток!
Я парсю спойлеры вот так:
PHP
1
2
3
4
5
6
7
8
        # BBcode [spoiler][/spoiler]
        $text = preg_replace_callback(
            '/\[spoiler(.*?)\](.*?)\[\/spoiler\]/is',
            function($match)
            {
                return $this->spoiler($match[1], $match[2]);
            },
        $text); # BBcode [spoiler][/spoiler] END
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
    private function spoiler($title, $content)
    {
        if (!empty($title))
        {
            $title = mb_substr($title, 1);
        }
        else
        {
            $title = Phpfox::getPhrase('core.hidden_information');
        }
 
        return '<div class="spoiler"><div class="spoiler-title" onclick="BBcodeSpoiler(this);">' . $title . '</div><div class="spoiler-body" style="display: none;">' . $content . '</div></div>';
    }
Все отлично работает, если только спойлер не имеет вложенных сполйлеров. Есть есть вложенные спойлеры, то получается замена на HTML теги первого [*spoiler] и первого попавшего [*/spoiler], все остальные остаются в виде BBcode.

Подскажите, как можно заменять все имеющиеся вложенные спойлеры?
Спасибо.
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
13.06.2017, 13:06
Ответы с готовыми решениями:

Парсер вложенных словарей
Доброго времени суток, форумчане! Делаю парсер для вложенных словарей типа a =...

Скрытие спойлеров
Необходимо сделать несколько спойлеров в которых бы работала следующая функция. Допустим у нас есть 7 спойлеров, при нажатии на один из них...

Отображение вложенных директорий без вложенных файлов (shlwapi.dll)
Здравствуйте. Вопрос: существует ли функция в shlwapi (или других библиотеках), позволяющая по имени (или идентификатору) какой-либо...

5
313 / 312 / 221
Регистрация: 11.07.2015
Сообщений: 1,107
13.06.2017, 14:26
Добавить поиск фразы [spoiler в переменной $content, если нашли - вернуть строку неизменённой
1
 Аватар для Raisin Zn
101 / 100 / 51
Регистрация: 19.04.2011
Сообщений: 965
13.06.2017, 14:44  [ТС]
Интересно! Верну строку не измененной. А что потом?

Добавлено через 7 минут
Цитата Сообщение от plohoyav Посмотреть сообщение
Добавить поиск фразы [spoiler в переменной $content, если нашли - вернуть строку неизменённой
Имеете в веду так:
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
    private function spoiler($title, $content)
    {
        if (preg_match('/[spoiler/is', $content))
        {
            return '[spoiler' . $itle . ']' . $content . '[/spoiler]';
        }
 
        if (!empty($title))
        {
            $title = mb_substr($title, 1);
        }
        else
        {
            $title = Phpfox::getPhrase('core.hidden_information');
        }
 
        return '<div class="spoiler"><div class="spoiler-title" onclick="BBcodeSpoiler(this);">' . $title . '</div><div class="spoiler-body" style="display: none;">' . $content . '</div></div>';
    }
???
0
1137 / 685 / 412
Регистрация: 07.11.2015
Сообщений: 1,102
13.06.2017, 15:41
PHP
1
2
3
4
5
6
7
8
9
10
11
12
do {
    $str = preg_replace_callback(
            '~ \[spoiler ([^\]]*) \] ( (?: [^\[]+ | \[ (?!/?spoiler\b) )* ) \[/spoiler\] ~xi',
            function($match)
            {
                return $this->spoiler($match[1], $match[2]);
            },
            $str,
            -1,
            $count
    );
} while ($count);
0
 Аватар для Raisin Zn
101 / 100 / 51
Регистрация: 19.04.2011
Сообщений: 965
13.06.2017, 16:08  [ТС]
Emilien, с Вашим кодом вообще пропадает весь текст поста...

Задачу решил заменой BBcode'ов по отдельности, сначала открывающий, потом закрывающий.
0
313 / 312 / 221
Регистрация: 11.07.2015
Сообщений: 1,107
13.06.2017, 16:47
В цикле while можно выполнять поиск открывающего спойлера, затем поиск закрывающего спойлера, затем поиск открывающего спойлера, стоящего ближе всего к закрывающему слева, выполнять замену, повторять цикл, до тех пор пока не исчезнут спойлеры.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
13.06.2017, 16:47
Помогаю со студенческими работами здесь

30 вложенных циклов
Добрый день! Помогите, пожалуйста! Решаю задачу. В ней у меня фигурируют 30 параметров. Например, нахожу их сумму (на самом деле нет, но...

7 вложенных квадратов
Пусть имеются 7 вложенных квадратов с одним центром, пронумерованных числами от 1 до 7 в порядке возрастания размеров и имеющих стороны...

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

Инициализация вложенных структур
#include &lt;iostream&gt; using namespace std; int main() { struct one { int var1; int var2; };

Парсинг вложенных объектов
Всем привет. Есть вот такой объект: var a= { nodes: }, { q:3 } ] }


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Опции темы

Новые блоги и статьи
Отчёт о спецтехнике находящейся в ремонте
Maks 20.04.2026
Отчёт из решения ниже размещен в конфигурации КА2. Задача: отобразить спецтехнику, которая на данный момент находится в ремонте. Есть нетиповой документ "Заявка на ремонт спецтехники" который. . .
Памятка для бота и "визитка" для читателей "Semantic Universe Layer (Слой семантической вселенной)"
Hrethgir 19.04.2026
Сгенерировано для краткого описания по случаю сборки и компиляции скелета серверного приложения. И пусть после этого скажут, что статьи сгенерированные AI - туфта и не интересно. И это не реклама -. . .
Запрет удаления строк ТЧ документа при определенном условии
Maks 19.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "Аккумуляторы", разработанного в конфигурации КА2. У данного документа есть ТЧ, в которой в зависимости от прав доступа. . .
Модель заражения группы наркоманов
alhaos 17.04.2026
Условия задачи сформулированы тут Суть: - Группа наркоманов из 10 человек. - Только один инфицирован ВИЧ. - Колются одной иглой. - Колются раз в день. - Колются последовательно через. . .
Мысли в слух. Про "навсегда".
kumehtar 16.04.2026
Подумалось тут, что наверное очень глупо использовать во всяких своих установках понятие "навсегда". Это очень сильное понятие, и я только начинаю понимать край его смысла, не смотря на то что давно. . .
My Business CRM
MaGz GoLd 16.04.2026
Всем привет, недавно возникла потребность создать CRM, для личных нужд. Собственно программа предоставляет из себя базу данных клиентов, в которой можно фиксировать звонки, стадии сделки, а также. . .
Знаешь почему 90% людей редко бывают счастливыми?
kumehtar 14.04.2026
Потому что они ждут. Ждут выходных, ждут отпуска, ждут удачного момента. . . а удачный момент так и не приходит.
Фиксация колонок в отчете СКД
Maks 14.04.2026
Фиксация колонок в СКД отчета типа Таблица. Задача: зафиксировать три левых колонки в отчете. Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка) / / . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru