Поиск нужного блока по регулярке.

vaulroon

Client
Регистрация
20.10.2017
Сообщения
274
Благодарностей
11
Баллы
18
В общем, есть блоки данных вида грубо говоря
[data_id="" class="" [тут еще куча всяких параметров] [а здесь конец блока, всегда одинаковый]]

И мне среди кучи вот таких блоков надо спарсить конкретный блок:

[data_id="" class="" [параметры] *Значение_которое_известно* [еще параметры] *Значение_которое_известно2* [а здесь конец блока, всегда одинаковый]]

Если нужный блок будет самый первый, то регуляркой
[data_id="" class="" (.*?) *Значение_которое_известно* (.*?) *Значение_которое_известно2* [а здесь конец блока, всегда одинаковый]]
он парсится как надо.
Но если перед ним стоят другие блоки, то с такой регуляркой он спарсит все блоки начиная с первого и заканчивая нужным блоком.
Как исправить регулярку, чтобы искал только нужный блок? Я так понимаю, тут нужно смотрящие использовать, но я читал, пытался понять, ниче не вышло. >_>
 

doc

Client
Регистрация
30.03.2012
Сообщения
8 685
Благодарностей
4 640
Баллы
113
нужны конкретные примеры текста, с которого идёт парсинг
 

vaulroon

Client
Регистрация
20.10.2017
Сообщения
274
Благодарностей
11
Баллы
18
<div data-bem="b-datalist__item" data-id="15138604090000000146" class="b-datalist__item js-datalist-item b-datalist__item_unread"><div class="b-datalist__item__body"><a rel="history" href="https://e.mail.ru/message/15138604090000000146/" class="js-href b-datalist__item__link" data-name="link" title="Почта России <[email protected]>" data-subject="пленки"><div class="js-item-checkbox b-datalist__item__cbx"><div data-bem="b-checkbox" data-id="15138604090000000146" class="js-checkbox b-checkbox"><div class="b-checkbox__box"></div><div class="b-checkbox__checkmark"></div><input class="b-checkbox__input" name="" value="" disabled="disabled" type="hidden"></div></div><div class="b-datalist__item__status"><span class="b-datalist__item__status-reply"></span><span class="b-datalist__item__status-unread"><div data-id="15138604090000000146" data-act="unread" class="b-letterstatus b-letterstatus_unread" title="Пометить прочитанным"><div class="b-letterstatus__icon ico ico_letterstatus ico_letterstatus_onhover ico_letterstatus_unread"></div></div></span></div><div class="b-datalist__item__flag"><div data-bem="b-flag" data-id="15138604090000000146" data-act="flag" class="js-hover b-flag b-flag_onhover" title="Пометить флажком"><b></b></div></div><div class="b-datalist__item__panel"><div class="b-datalist__item__date"><span class="b-datalist__item__value b-datalist__item__date__value" title="Сегодня, 13:46">13:46</span></div><div class="b-datalist__item__info"><div class="b-datalist__item__wrapper"><div class="b-datalist__item__subj">пленки<span class="b-datalist__item__subj__snippet">Принято в отделении связи пленки ZA290284388HK Открыть на сайте Служебное письмо от Почты России Под</span></div></div><div class="b-datalist__item__addr">Почта России</div></div></div></a></div></div><div data-bem="b-datalist__item" data-id="15135133820000000706" class="b-datalist__item js-datalist-item"><div class="b-datalist__item__body"><a rel="history" href="https://e.mail.ru/message/15135133820000000706/" class="js-href b-datalist__item__link" data-name="transaction_link" title="ОНЛАЙН ТРЕЙД.РУ <[email protected]>" data-subject="Заказ 6249443: готов к получению"><div class="js-item-checkbox b-datalist__item__cbx"><div data-bem="b-checkbox" data-id="15135133820000000706" class="js-checkbox b-checkbox"><div class="b-checkbox__box"></div><div class="b-checkbox__checkmark"></div><input class="b-checkbox__input" name="" value="" disabled="disabled" type="hidden"></div></div><div class="b-datalist__item__status"><span class="b-datalist__item__status-reply"></span><span class="b-datalist__item__status-read"><div data-id="15135133820000000706" data-act="unread" class="b-letterstatus" title="Пометить непрочитанным"><div class="b-letterstatus__icon ico ico_letterstatus ico_letterstatus_onhover ico_letterstatus_read"></div></div></span></div><div class="b-datalist__item__flag"><div data-bem="b-flag" data-id="15135133820000000706" data-act="flag" class="js-hover b-flag b-flag_onhover" title="Пометить флажком"><b></b></div></div><div class="b-datalist__item__panel"><div class="b-datalist__item__date"><span class="b-datalist__item__value b-datalist__item__date__value" title="17 декабря, 13:23">17 дек</span></div><div class="b-datalist__item__info"><div class="b-datalist__item__wrapper"><div class="b-datalist__item__subj"><span class="b-datalist__item__badge"><i class="b-datalist__item__badge__icon ico ico_transaction-category ico_transaction-category_order" data-name="icon_order"></i></span>Заказ 6249443: готов к получению<span class="b-datalist__item__subj__snippet">Интернет-магазин ОНЛАЙН ТРЕЙД.РУ Актуально на: 17.12.2017 13:40 Здравствуйте, Игорь Соловьев! Статус Вашего заказа 6249443 от 16.12.2017 5:29 был изменен 17.12.2017 13:40 на: Готов к получению Подробную информацию о заказе Вы можете узнать в личном кабинете. Информация о самовывозе: Согласованная дата получения заказа: 17.12.2017 Срок хранения заказа до: 19.12.2017 включительно. Пункт выдачи: г. Санкт-Петербург, метро Приморская, Васильевский Остров, ул.Железноводская, д. 68, лит. Б, ТК «МаксиСопот», 2-й этаж, павильон №2.6 (схема проезда) Режим работы: ежедневно 10:00-20:45 Состав заказа: Товар Кол-во</span></div></div><div class="b-datalist__item__addr">ОНЛАЙН ТРЕЙД.РУ</div></div></div></a></div></div>

Вот пример блока. Мне известен отправитель и известен сабжект. На примере этого письма - data-subject="пленки" и <div class="b-datalist__item__addr">ОНЛАЙН ТРЕЙД.РУ
 

doc

Client
Регистрация
30.03.2012
Сообщения
8 685
Благодарностей
4 640
Баллы
113
а что из этого нужно выпарсить?
 

vaulroon

Client
Регистрация
20.10.2017
Сообщения
274
Благодарностей
11
Баллы
18
а что из этого нужно выпарсить?
Весь блок. От <div data-bem="b-datalist__item" до </div></div></div></a></div></div>. В нужном блоке присутствует data-subject="пленки" и отправитель ОНЛАЙН ТРЕЙД.РУ.
<div data-bem="b-datalist__item"(.*?)data-subject="пленки"(.*?)ОНЛАЙН ТРЕЙД.РУ</div></div></div>
Такую регулярку делаю, она парсит только если письмо (читай блок) находится первым в списке. Если 2-3-4, то парсит до кучи и 1-2-3 письма.
 

arhip1985

Client
Регистрация
31.10.2011
Сообщения
2 994
Благодарностей
787
Баллы
113
не докопался до истоков, но самое короткое совпадение ? не всегда работает так как хотелось бы, и из-за этого видимо парсится больше одного блока.. пока вижу один костыль, но типа танца с бубном - добавлять после (.*) ограничение {от,до}
 

doc

Client
Регистрация
30.03.2012
Сообщения
8 685
Благодарностей
4 640
Баллы
113
Весь блок. От <div data-bem="b-datalist__item" до </div></div></div></a></div></div>. В нужном блоке присутствует data-subject="пленки" и отправитель ОНЛАЙН ТРЕЙД.РУ.
<div data-bem="b-datalist__item"(.*?)data-subject="пленки"(.*?)ОНЛАЙН ТРЕЙД.РУ</div></div></div>
Такую регулярку делаю, она парсит только если письмо (читай блок) находится первым в списке. Если 2-3-4, то парсит до кучи и 1-2-3 письма.
по этим критериям нет блока в твоём примере. Плёнки в первом блоке. А нужный отправитель во втором
 

vaulroon

Client
Регистрация
20.10.2017
Сообщения
274
Благодарностей
11
Баллы
18
по этим критериям нет блока в твоём примере. Плёнки в первом блоке. А нужный отправитель во втором
Тьфу ты. Вижу че-то не так и понять не могу че. Вроде почта россии, а с другой стороны онлайн трейд. :D 2 блока скинул.

<div data-bem="b-datalist__item" data-id="15138604090000000146" class="b-datalist__item js-datalist-item b-datalist__item_unread"><div class="b-datalist__item__body"><a rel="history" href="https://e.mail.ru/message/15138604090000000146/" class="js-href b-datalist__item__link" data-name="link" title="Почта России <[email protected]>" data-subject="пленки"><div class="js-item-checkbox b-datalist__item__cbx"><div data-bem="b-checkbox" data-id="15138604090000000146" class="js-checkbox b-checkbox"><div class="b-checkbox__box"></div><div class="b-checkbox__checkmark"></div><input class="b-checkbox__input" name="" value="" disabled="disabled" type="hidden"></div></div><div class="b-datalist__item__status"><span class="b-datalist__item__status-reply"></span><span class="b-datalist__item__status-unread"><div data-id="15138604090000000146" data-act="unread" class="b-letterstatus b-letterstatus_unread" title="Пометить прочитанным"><div class="b-letterstatus__icon ico ico_letterstatus ico_letterstatus_onhover ico_letterstatus_unread"></div></div></span></div><div class="b-datalist__item__flag"><div data-bem="b-flag" data-id="15138604090000000146" data-act="flag" class="js-hover b-flag b-flag_onhover" title="Пометить флажком"><b></b></div></div><div class="b-datalist__item__panel"><div class="b-datalist__item__date"><span class="b-datalist__item__value b-datalist__item__date__value" title="Сегодня, 13:46">13:46</span></div><div class="b-datalist__item__info"><div class="b-datalist__item__wrapper"><div class="b-datalist__item__subj">пленки<span class="b-datalist__item__subj__snippet">Принято в отделении связи пленки ZA290284388HK Открыть на сайте Служебное письмо от Почты России Под</span></div></div><div class="b-datalist__item__addr">Почта России</div></div></div></a></div></div>

Вот один блок.
<div data-bem="b-datalist__item"(.*?)data-subject="пленки"(.*?)Почта России</div></div></div>
И вот регулярка по нему. )
 

doc

Client
Регистрация
30.03.2012
Сообщения
8 685
Благодарностей
4 640
Баллы
113
<div data-bem="b-datalist__item"[^>]*><[^>]*><a[^>]*title="Почта России[^"]*"[^>]*data-subject="пленки"(.*?)</div></div></div>
 

vaulroon

Client
Регистрация
20.10.2017
Сообщения
274
Благодарностей
11
Баллы
18

Кто просматривает тему: (Всего: 1, Пользователи: 0, Гости: 1)