Форум программистов, компьютерный форум, киберфорум
PHP: RegExp
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/6: Рейтинг темы: голосов - 6, средняя оценка - 5.00
6 / 5 / 2
Регистрация: 08.09.2015
Сообщений: 95

Выбрать нужный параграф

06.02.2017, 23:25. Показов 1384. Ответов 14
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый день!
Подскажите как выбрать нужный параграф из HTML страницы.

В нужном параграфе есть текст XXX

/<p.*?XXX.*?p>/s - захватывает вместе с нужным, все предыдущие параграфы.

Пример <p rhrh rhrr > ejej </p><p jeje ehe > df XXX hg</p>
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
06.02.2017, 23:25
Ответы с готовыми решениями:

Выбрать нужный элемент
Доброе время суток, не могу понять как задать селектор, чтоб выбрать нужный мне элемент К примеру есть html код &lt;div...

Как выбрать нужный элемент?
Всем привет! Подскажите пожалуйста, как это модернизировать. Есть вот такой код let i = 1; for(let li of...

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

14
142 / 142 / 63
Регистрация: 18.07.2014
Сообщений: 473
07.02.2017, 04:43
Попробуйте так: /<p[^>]*>[^<]*XXX[^<]*<\/p>/isU

Добавлено через 2 минуты
если в параграфе будут ещё теги то так: /<p[^>]*>.*XXX.*<\/p>/isU
1
6 / 5 / 2
Регистрация: 08.09.2015
Сообщений: 95
07.02.2017, 04:55  [ТС]
/<p[^>]*>[^<]*XXX[^<]*<\/p>/isU

да, это будет работать. Но если нет тэгов внутри параграфа

а второй
/<p[^>]*>.*XXX.*<\/p>/isU
опять захватывает все.

Я вот не могу сообразить - исключить два символа подряд в комбинации возможно? Тогда минусовка p> перед XXX решила бы проблему.

Тэги внутри параграфа конечно есть.
0
142 / 142 / 63
Регистрация: 18.07.2014
Сообщений: 473
07.02.2017, 05:49
Можно сыграть на том что известно какие теги есть внутри параграфа, т.к. параграфы не могут быть вложенными, если такой вариант сойдёт то можно перечислять в шаблоне теги которые встречаются внутри параграфа. Ну или какой-то другой способ поиска текста, я бы подумал если Вы предоставите подробнее текст поиска и пример текста где будет происходить поиск.
1
6 / 5 / 2
Регистрация: 08.09.2015
Сообщений: 95
07.02.2017, 07:35  [ТС]
Спасибо за помощь. Известные теги я понимаю как выцепить

Задача в целом: (может я неправильно делаю

Есть несколько файлов из Word с данными. составлены по определенному принципу. Мне нужно эти данные выцепить и загнать в таблицу. Заставить пользователя переделывать в Excel - практически нереально. Да и задача не очень сложная.
1.Сохраняю файл в ворде как html с фильтром (когда картинки отдельно в папке).
Он разбросал весь текст на параграфы со своими стилями и т.п.
2.Обрабатываю получившийся файл, разбирая параграфы.

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

Почему не в текст и разбирать?
Текст в ворде содержит и картинки и формулы. При переводе в вэб - все это хорошо переводится и сохраняется. Удобно и в базе хранить и выводить потом в виде страницы.

3. Хотелось сделать что-то универсальное, чтобы потом пользователь(продвинутый) мог сам проделывать подобные манипуляции, без программиста.
0
142 / 142 / 63
Регистрация: 18.07.2014
Сообщений: 473
07.02.2017, 15:33
Вообще из-за вложенности тегов парсить html регулярками достаточно не просто, я в таких случаях работаю со структурой html а точнее перевожу его в xml и там уже ищу что мне нужно, с xml можно работать как с объектом (simplexml) или c помощью xpath. Ещё один момент: файлы word а именно docx представляют из себя zip-архив в котором лежат xml файлы, возможно то что Вам нужно проще проделывать именно с этими файлами, т.е. без преобразования документа.
1
6 / 5 / 2
Регистрация: 08.09.2015
Сообщений: 95
07.02.2017, 17:02  [ТС]
Тоже вариант.
Хотя посмотрел я этот docx. там черт ногу сломит, лучше родной htm
Например в тексте встречаются формулы типа H2SO4
В HTML просто SUB-ами экранируется, их же можно потом и в готовую страницу выдавать в браузере. И ворд при сохранении в HTM сразу так и делает.
А вордовский DOCX слишком хитро все закручивает. Картинки опять же.
Про регулярку спросил - думал получится изящно, одной левой строкой...

Спасибо за подсказки, буду спокойно разбирать теги, это на мой взгляд несложно. Если вдруг соображу с регуляркой - напишу.
0
142 / 142 / 63
Регистрация: 18.07.2014
Сообщений: 473
07.02.2017, 17:43
Вот попробуйте, я не проверял но должно работать: /<p[^>]*> ([^<]|<[^p]|<p[^\s])*XXX([^<]|<[^p]|<p[^\s])*<\/p>/isU
1
6 / 5 / 2
Регистрация: 08.09.2015
Сообщений: 95
08.02.2017, 10:42  [ТС]
Цитата Сообщение от Igsit Посмотреть сообщение
Вот попробуйте, я не проверял но должно работать: /<p[^>]*> ([^<]|<[^p]|<p[^\s])*XXX([^<]|<[^p]|<p[^\s])*<\/p>/isU
Класс!! Работает!
Я не мог сообразить как сделать проверку на 2 символа.
Теперь понятно, заодно упростил вашу регулярку:

/<p([^>]|[^p]>)*?XXX.*?p>/s

Тоже работает!
0
142 / 142 / 63
Регистрация: 18.07.2014
Сообщений: 473
08.02.2017, 11:28
Цитата Сообщение от VladRost Посмотреть сообщение
заодно упростил вашу регулярку
Я написал регулярку учитывающую все возможные варианты, а Вы не упростили а урезали, теперь будут неправильные срабатывания. Вот это *? что за конструкция? и зачем после <p искать ( не '>' или (не 'p' и '>') ) ??? непойму, вот это <p[^>]*> тут то что надо, а Ваше <p([^>]|[^p]>)* вообще не понятно для чего?
1
6 / 5 / 2
Регистрация: 08.09.2015
Сообщений: 95
08.02.2017, 11:54  [ТС]
Цитата Сообщение от Igsit Посмотреть сообщение
Я написал регулярку учитывающую все возможные варианты, а Вы не упростили а урезали, теперь будут неправильные срабатывания. Вот это *? что за конструкция? и зачем после <p искать ( не '>' или (не 'p' и '>') ) ??? непойму, вот это <p[^>]*> тут то что надо, а Ваше <p([^>]|[^p]>)* вообще не понятно для чего?
Все верно. Перед XXX может быть что угодно, кроме закрытия параграфа - это p> Два символа я ни как не мог вставить в регулярку, а перебором получается. Ставим или не > или закрывающий > , но перед ним не должно быть p, то есть параграф должен закончиться уже за XXX. Поэтому внутри параграфа может быть сколько угодно тэгов, главное не должно быть закрытия самого параграфа.

А вопрос за звездочкой - снимает "жадность". То есть без него моя регулярка схватит все до последнего закрывающего знака параграфа в тексте, то есть схватит и параграфы сзади нужного.

Я проверял и вашу регулярку и свою на сайте http://regex101.com. С разными текстами - все работает. Да и логически все должно работать.
0
142 / 142 / 63
Регистрация: 18.07.2014
Сообщений: 473
08.02.2017, 11:58
Цитата Сообщение от VladRost Посмотреть сообщение
А вопрос за звездочкой - снимает "жадность"
для этого я прописал модификатор U в регулярке /..../isU
Цитата Сообщение от VladRost Посмотреть сообщение
Перед XXX может быть что угодно, кроме закрытия параграфа - это p>
а Вы не предполагаете что p> может быть не только закрывающим тегом параграфа а ещё например окончанием вот такого: <div id=stop> ?
1
6 / 5 / 2
Регистрация: 08.09.2015
Сообщений: 95
08.02.2017, 12:23  [ТС]
Цитата Сообщение от Igsit Посмотреть сообщение
для этого я прописал модификатор U в регулярке /..../isU

а Вы не предполагаете что p> может быть не только закрывающим тегом параграфа а ещё например окончанием вот такого: <div id=stop> ?
Согласен! может и такое быть, тогда надо ставить перед p / . Вижу еще один недостаток - если XXX если будет внутри какого-либо тега, то моя регулярка тоже сработает. Но это уже мелочи. Главное понятен принцип и подбором нужных ключевых слов решаемо. Ну или расширением регулярки, как вы прописали.

Я просто давно уже не занимался, раньше щелкал как семечки все, но подзабыл и потерял свои старые доки. К новым из инета никак не приспособлюсь. Вспоминаю забытое
0
142 / 142 / 63
Регистрация: 18.07.2014
Сообщений: 473
08.02.2017, 15:37
Цитата Сообщение от VladRost Посмотреть сообщение
Вижу еще один недостаток
Моя регулярка учитывает все эти возможные ситуации и не нужно пытаться упростить её, я составлял её исходя из условий задачи. Если бы можно было бы сократить, я бы сократил. И не нужно пугаться сложных(длинных) регулярок, тем более она простая до безобразия, просто много вариантов(или) в ней )
1
6 / 5 / 2
Регистрация: 08.09.2015
Сообщений: 95
10.02.2017, 15:33  [ТС]
Цитата Сообщение от Igsit Посмотреть сообщение
Моя регулярка учитывает все эти возможные ситуации и не нужно пытаться упростить её, я составлял её исходя из условий задачи. Если бы можно было бы сократить, я бы сократил. И не нужно пугаться сложных(длинных) регулярок, тем более она простая до безобразия, просто много вариантов(или) в ней )

Что-то схожу с ума

Вот 2 примера из моей задачи. файлы 005 и 006 с расширением htm
Это то что получилось из ворда, вырезал нормальный и проблемный кусок.
Тестовая программка test5, которая просто обрабатывает одну регулярку. В примере или ваша или моя с выбором любого параграфа.

На файле 005 все работает как положено, на файле 006 программа не работает.
Причем на сайтеhttps://regex101.com на обоих примерах обе регулярки работают без проблем. А в программе вылетают на одном из параграфов (самый длинный).



В чем может быть проблема??? Или как ее определить что за проблема, у меня просто не открывается страница.
Вложения
Тип файла: zip primer.zip (1.8 Кб, 2 просмотров)
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
10.02.2017, 15:33
Помогаю со студенческими работами здесь

Как выбрать нужный Пунк из Select'a?
Есть несколько Select, id у всех типа Sel1, Sel2 и т.д. И мне надо, чтоб при загрузке скриптом устанавливался соответственно 0ой, 1ый...

Как из двух вордов выбрать нужный?
На виндовс 7 установлены два офиса - 2003 и 2007. И теперь при клике на вордовский файл он запускается вордом 2007. Можно ли что-то...

Помогите выбрать нужный модем/маршрутеризатор
Дорогие форумчане задался цель подключить подругу через Wi-Fi к своему интернету. Подруга живет в 45 метрах от меня, в частном секторе...

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

Выбрать нужный файл в папке с неполным именем
Есть директория &quot;С:&quot; в которой есть папка &quot;data&quot;, а в этой папке куча папок и один файл, папки и файл имеют разные имена, знаю длину имени...


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

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
Новые блоги и статьи
Оттенки серого
Argus19 18.03.2026
Оттенки серого Нашёл в интернете 3 прекрасных модуля: Модуль класса открытия диалога открытия/ сохранения файла на Win32 API; Модуль класса быстрого перекодирования цветного изображения в оттенки. . .
SDL3 для Desktop (MinGW): Рисуем цветные прямоугольники с помощью рисовальщика SDL3 на Си и C++
8Observer8 17.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-rectangles-sdl3-c. zip finish-rectangles-sdl3-cpp. zip
Символические и жёсткие ссылки в Linux.
algri14 15.03.2026
Существует два типа ссылок — символические и жёсткие. Ссылка в Linux — это запись в каталоге, которая может указывать либо на inode «файла-ИСТОЧНИКА», тогда это будет «жёсткая ссылка» (hard link),. . .
[Owen Logic] Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ФедосеевПавел 14.03.2026
Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора ВВЕДЕНИЕ Выполняя задание на управление насосной группой заполнения резервуара,. . .
делаю науч статью по влиянию грибов на сукцессию
anaschu 13.03.2026
прикрепляю статью
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
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru