Показать сообщение отдельно
  #1 (permalink)  
Старый 06.01.2018, 00:17
Кандидат Javascript-наук
Отправить личное сообщение для Cache Посмотреть профиль Найти все сообщения от Cache
 
Регистрация: 02.05.2013
Сообщений: 111

парсинг данныхregexp'ом
Доброго времени суток.
Пытаюсь парсить данные из таблицы, но уже голову сломал как это сделать быстро и менее затратно по ресурсам.
Задачка, есть, к примеру куча div'ов содержащих талбицы:
<div><table>...</table></div>

В таблице несколько значений, часть из них постоянны, часть могут присутствовать, могут не присутствовать, но порядок постоянный, например:
непостоянные:
мука
дрожжи
яйцо
сыр
мясо говяжье
мясо свиное
рыба
лук
соль
перец

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

<div id=""><table width=300 cellpadding=2 cellspacing=0><tr><th style=text-align:center;>Название</th></tr>Бtr><td>мука: 40% <br />яйцо: 50% <br />соль: 10% <br /></td></tr><tr><th style=text-align:center;></th></tr><tr><td><hr />ккал: 100 <br /></td><td><hr />углеводы: 100 <br /></td><td><hr />жирность: 100 <br /></td></tr></table></div>


Сейчас, я беру каждый div и парсю его по наличию в нем тех или иных элементов по отдельности, как-то так:
/сыр (\d+)/i


пробовал парсить сразу все одним выражением, но получаю интересный эффект, берется первое найденное выражение из необязательных, и потом все обязательные, все что между - пропускается.
Регулярка:
/<td>.*?(?:мука: (\d+))?.*?(?:дрожжи: (\d+))?.*?(?:яйцо: (\d+))?.*?(?:сыр: (\d+))?.*?(?:мясо говяжье: (\d+))?.*?(?:мясо свиное: (\d+))?.*?(?:рыба: (\d+))?.*?(?:лук: (\d+))?.*?(?:соль: (\d+))?.*?(?:перец: (\d+))?.*?ккал: (\d+).*?углеводы: (\d+).*?жирность: (\d+).*?
/i

Помогите исправить или возможно изменить вообще принцип сбора данных, если оба способа, совсем уж "кривые".

https://regex101.com/r/zORcAQ/1
Ответить с цитированием