Форум программистов, компьютерный форум, киберфорум
PHP для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.92/26: Рейтинг темы: голосов - 26, средняя оценка - 4.92
18 / 15 / 8
Регистрация: 15.05.2013
Сообщений: 212

Регулярное выражение для удаления текста определенного класса вместе с тегами

15.04.2019, 12:59. Показов 5109. Ответов 7

Студворк — интернет-сервис помощи студентам
В общем есть такой код:
HTML5
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
<li>
Срок действия:<div id="expiration-message-link" class="question-mark popup-modal popup-expiration-message-link">?</div> марта 2021
                    <div class="popup-container modal-expiration-message-link">
                        <div class="popup-title">
                            Срок действия
                        </div>
                        <div class="popup-content">
                            <p>Продолжительность срока действия или "лучше использовать до указанной даты" зависят от типа продукции и бренда.</p>
                            <p>Скоропортящиеся продукты (такие, как масло льна или некоторые пробиотики) обычно имеют более короткие сроки годности. Несмотря на то, что наш склад полностью оснащен оборудованием для кондиционирования воздуха, наиболее скоропортящиеся товары хранятся в холодильнике (морозильной камере или холодильном помещении) для сохранения максимальной свежести.</p>
                            <p>Принимающий отдел компании делает все возможное, чтобы убедиться в корректности сроков годности для всех поступающих продуктов и ввести их в систему. Однако, иногда возможны расхождения. Как уже было сказано, исключительно быстрый оборот продукции в iHerb гарантирует, что наши запасы товаров являются одними из самых свежих в отрасли.</p>
                        </div>
                    </div>
                </li>
            <li>
                Вес Отправления:<div id="shipping-weight-link" class="question-mark popup-shipping-weight">?</div>
                <div class="dimensions-popup-wrapper weight">
                    <span class="product-weight">
                        0.21 кг
                    </span>
                    <div class="dimensions-units-popup weight">Переключиться на империальные единицы</div>
                </div>
                <div class="popup-container modal-shipping-weight">
                    <div class="popup-title">Вес Отправления</div>
                                    </div>
            </li>
            <li>Код Товара:   <span itemprop="sku">MLI-00952</span>
</li>
            <li>UPC Код:   <span itemprop="gtin12">898220009527</span>
</li>
                <li>Количество в Упаковке:   100 штук</li>
                            <li>
                    Размеры:
                    <div class="dimensions-popup-wrapper dimensions">
                        <span class="product-weight">
                                <span id="dimensions">11.4 x 6.1 x 6.1 cm </span>, 
                                <span id="actual-weight">0.18 кг</span>
                        </span>
                        <div class="dimensions-units-popup dimensions">Переключиться на империальные единицы</div>
                    </div>
                </li>
Из этого кода нужно удалить всё что между <div class="popup-container modal-expiration-message-link"> и </div> вместе с этими тегами. Как это сделать с помощью регулярных выражений?
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
15.04.2019, 12:59
Ответы с готовыми решениями:

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

Регулярное выражение для удаления IP-адресов
В текстовом файле могут содержаться (как отдельные слова) IP-адреса компьютеров в формате d.d.d.d, где d – целое число из диапазона от 0 до...

Регулярное выражение для удаления символа
Написать регулярное выражение, удалиющее все буквы &quot;b&quot; из строки

7
 Аватар для Строитель
1084 / 746 / 364
Регистрация: 09.07.2018
Сообщений: 1,760
15.04.2019, 13:12
masta, <div class="popup-container modal-expiration-message-link">.+?</div>\s+(?=</li>)
1
18 / 15 / 8
Регистрация: 15.05.2013
Сообщений: 212
15.04.2019, 13:12  [ТС]
Точнее из этого кода нужно удалить весь текст с классом popup-container вместе с тегами.
0
 Аватар для Строитель
1084 / 746 / 364
Регистрация: 09.07.2018
Сообщений: 1,760
15.04.2019, 13:22
Цитата Сообщение от masta Посмотреть сообщение
удалить весь текст с классом popup-container вместе с тегами.
<div\s+class="popup-container[^"]+">.+?</div>\s+(?=</li>)
1
18 / 15 / 8
Регистрация: 15.05.2013
Сообщений: 212
15.04.2019, 13:32  [ТС]
Я попробовал это выражение таким способом:
$feat = preg_replace('<div\s+class="popup-container[^"]+">.+?</div>\s+(?=</li>)', '', $feat);
но php ругается:
Warning: preg_replace(): Unknown modifier '.'
0
 Аватар для Строитель
1084 / 746 / 364
Регистрация: 09.07.2018
Сообщений: 1,760
15.04.2019, 13:35
Лучший ответ Сообщение было отмечено masta как решение

Решение

masta, это потому, что вы не добавили в шаблон ограничители. Но помимо этого, так же обращайте внимание на модификаторы шаблона (следуют после ограничителя). На PHP этот код будет выглядеть так:
PHP
1
2
3
4
$patt = '~<div\s+class="popup-container[^"]+">.+?</div>\s+(?=</li>)~s';
$feat = preg_replace($patt, '', $feat);
 
echo $feat;
Но справедливости ради, нужно сказать, что для подобного парсинга не используют регулярные выражения
1
18 / 15 / 8
Регистрация: 15.05.2013
Сообщений: 212
15.04.2019, 13:59  [ТС]
Спасибо большое! Сработало!

Добавлено через 10 минут
Ещё последний вопрос, а как вырезать теперь из кода который остался
HTML5
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
<li>
                    Срок действия:<div id="expiration-message-link" class="question-mark popup-modal popup-expiration-message-link">?</div> марта 2021
                    </li>
            <li>
                Вес Отправления:<div id="shipping-weight-link" class="question-mark popup-shipping-weight">?</div>
                <div class="dimensions-popup-wrapper weight">
                    <span class="product-weight">
                        0.21 кг
                    </span>
                    <div class="dimensions-units-popup weight">Переключиться на империальные единицы</div>
                </div>
                </li>
            <li>Код Товара:   <span itemprop="sku">MLI-00952</span>
</li>
            <li>UPC Код:   <span itemprop="gtin12">898220009527</span>
</li>
                <li>Количество в Упаковке:   100 штук</li>
                            <li>
                    Размеры:
                    <div class="dimensions-popup-wrapper dimensions">
                        <span class="product-weight">
                                <span id="dimensions">11.4 x 6.1 x 6.1 cm </span>, 
                                <span id="actual-weight">0.18 кг</span>
                        </span>
                        <div class="dimensions-units-popup dimensions">Переключиться на империальные единицы</div>
                    </div>
                </li>
 
 
 
                <li><bdi><span><strong><font size="+1"><font color="#ff0000">Новый вид! Та же великолепная формула!</font></font></strong><br>Май 2018 года. Ранее данный продукт был представлен брендом Madre Labs. В настоящее время он принадлежит California Gold Nutrition. </span><br><span><font size="+1"><strong>iTested: <a href="https://s3.images-iherb.com/cms/pdf/cgn-00952-01330-itested-omega-3-12219.pdf" target="_Blank"> <u>Сертификат анализа</u></a></strong></font></span><br><span style="vertical-align:middle"><strong><font size="+1">Попробуйте без риска в течение 90 дней</font></strong><span class="question-mark popup-special-note">?</span></span></bdi></li>
                                <br>Производитель: 
            California Gold Nutrition (Калифорния Голд Нутришен)<br>
удалить все дивы с классом question-mark вместе с тегами? Я попробовал класс заменить в предыдущей регулярке
PHP
1
 $patt2 = '~<div\s+class="question-mark[^"]+">.+?</div>\s+(?=</li>)~s';
но не сработало...

Добавлено через 11 минут
Цитата Сообщение от VNIIAEN Посмотреть сообщение
Но справедливости ради, нужно сказать, что для подобного парсинга не используют регулярные выражения
При импорте не нужны просто всплывающие подсказки с текстом, по этому я решил что их лучше вырезать сразу при парсинге, чем потом в excel...
0
 Аватар для Строитель
1084 / 746 / 364
Регистрация: 09.07.2018
Сообщений: 1,760
15.04.2019, 15:39
Лучший ответ Сообщение было отмечено masta как решение

Решение

Цитата Сообщение от masta Посмотреть сообщение
удалить все дивы с классом question-mark вместе с тегами
<(?:div\s+id=\S+|span\s+)\s?class="question-mark[^"]+?">.+?</(?:div|span)>
PHP
1
$patt2 = '~<(?:div\s+id=\S+|span\s+)\s?class="question-mark[^"]+?">.+?</(?:div|span)>~s';
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
15.04.2019, 15:39
Помогаю со студенческими работами здесь

Регулярное выражение для удаления URL из строки
Задача состоит в том, чтоб находить УРЛ в строке Например в названии файла: imagewww.не понятно нафига всунутый урл.ru].jpg Удалятся...

Регулярное выражение для удаления html entities
Как в тексте заменить вот такие данные &quot;&amp; # 9 9 8 9 ;&quot; (эмодзи, специально пробелами здесь разбил а то выводится как эмодзи) пустой...

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

Регулярное выражение для удаления лишних одинарных кавычек
Подскажите пожалуйста выражение, что бы убирать лишние ', при этом не затрагиваю те, что внутри слов. Спасибо. The time '' is ' eleven...

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


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

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Новые блоги и статьи
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip Сканируйте QR-код на мобильном и вы увидите, что появится джойстик для управления главным героем. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru