powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / регулярки. помогите распарсить.
8 сообщений из 8, страница 1 из 1
регулярки. помогите распарсить.
    #37888428
kkv79
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
есть строка
автор<td>Приём</td><td>11.07.2012 00:00</td><td>350033</td><td>КРАСНОДАР 33</td><td>Единичный</td><td>0,295</td><td>1470</td><td>1470</td><td>432044</td><td>УЛЬЯНОВСК, УЛЬЯНОВСКАЯ ОБЛАСТЬ</td></tr><tr align="center"><td>Обработка</td><td>12.07.2012 00:00</td><td>350964</td><td>КРАСНОДАР МСЦ ЦОСП</td><td>Покинуло сортировочный центр</td><td>0,000</td><td>0</td><td>0</td><td></td><td></td></tr><tr align="center"><td>Обработка</td><td>17.07.2012 00:00</td><td>432099</td><td>УЛЬЯНОВСК ПОЧТАМТ</td><td>Покинуло сортировочный центр</td><td>0,000</td><td>0</td><td>0</td><td></td><td></td></tr><tr align="center"><td>Обработка</td><td>17.07.2012 07:53</td><td>432044</td><td>УЛЬЯНОВСК 44</td><td>Прибыло в место вручения</td><td>0,000</td><td>0</td><td>0</td><td></td><td></td></tr><tr align="center"><td>Вручение</td><td>18.07.2012 00:00</td><td><a href=javascript:Wind(41965)>432044</td><td>УЛЬЯНОВСК 44</td><td>Вручение адресату</td><td>0,295</td><td>1470</td><td>0</td><td></td><td></td></tr></tbody></table></div><br clear="all" /><div align="right"><a href="#top" class="lnk_ontop">наверх</a></div><div align="left"><a href="javascript:SetPrintable()" class="lnk_print">Версия для печати</a></div></div></td></tr></table></form></body></html>


оригинал тут
http://www.russianpost.ru/resp_e...uslug/trackingpo
номер отправления 35003348084103



мне нужно как-то последнюю строку из таблицы выдергивать
т.е. то что идёт
после слов Приём или Обработка или Вручение (?<=Приём</td><td>|Обработка</td><td>|Вручение</td><td>)
и непосредственно перед (?=Версия для печати)
хелп!!!
...
Рейтинг: 0 / 0
регулярки. помогите распарсить.
    #37888447
kkv79
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
не правильно выразился...
не "выдернуть", а "мне нужна последняя строка"...
...
Рейтинг: 0 / 0
регулярки. помогите распарсить.
    #37888531
vkle
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kkv79, наверно как то так:

Код: php
1.
'#<tr align="center"><td>(Приём|Обработка|Вручение).+</tr></tbody></table>#U'


Или вместо ".+" явно перечислить ячейки, чтоб дополнительно не срезать html-теги.
...
Рейтинг: 0 / 0
регулярки. помогите распарсить.
    #37888563
kkv79
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
не, всё не то....

давайте последовательно...
1. как из строки выдернуть последнюю дату "18.07.2012 00:00" ???
дате соответствует выражение
\d\d.\d\d.\d{4}\s\d\d:\d\d

но при этом выдернется первая дата, т.е. "12.07.2012 00:00"

чтоб выдернуть последнюю дату, нужно составить регулярку чтоб было так:
сперва идёт дата "\d\d.\d\d.\d{4}\s\d\d:\d\d", после идёт любое количество символов ".*" а затем даты быть не должно
а как это выразить "а затем даты быть не должно", я чёт не пойму.
...
Рейтинг: 0 / 0
регулярки. помогите распарсить.
    #37888567
vkle
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kkv79,

Ну вот, задание в корне изменилось. Оказывается, не все, а только даты? Думаю, нет смысла заморачиваться на датах. Давайте по порядку. Вам нужна последняя строка. Значит, будет закрывающий тег строки и следом будет конец таблицы "</tr></tbody></table>". С этим вроде как понятно. Начало строки - последний тег <tr align="center">. Модификатор U сделает регексп не жадным, потому будет выбран именно последний открывающий тег. Далее требуется достать данные из ячеек таблицы. Каждая ячейка представляет собой пару тегов <td> и </td>, между которыми может быть что-то, а может и не быть. Просто. Тут шаблон "<td>(.*)</td>" по кол-ву ячеек в строке.


Первую ячейку Вы хотите ограничить правилом "(Приём|Обработка|Вручение)", как понимаю. Я б не стал ограничивать, скорее всего. Думаю, так проще обработать ситуации экспорта/импорта/таможни в последней строке. Впрочем, тут Вам виднее по задаче - выбирать любое значение, или только прием/обработку/вручение. Однако, не совсем ясно тогда становится, если будет первой строкой прием, второй - экспорт, третьей - импорт, а последней, четвертой - таможня... тогда что выбирать? Или международные отправления не входят в задачу?

Итак, не заморачиваясь на содержимом ячеек, получается примерно так

Код: php
1.
'#<tr align="center"><td>(.*)</td><td>(.*)</td><td>(.*)</td> и так далее <td>(.*)</td></tbody></table>#U'


Усе. Берем нужные элементы массива и их используем. Если какие-то элементы не нужны в принципе - просто убираем скобки, тогда массив сократится.
...
Рейтинг: 0 / 0
регулярки. помогите распарсить.
    #37888584
kkv79
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
идею понял....
сделал так
Код: php
1.
2.
3.
preg_match('#<tr align="center"><td>(.*)</td><td>(.*)</td><td>(.*)</td><td>(.*)</td><td>(.*)</td><td>(.*)</td><td>(.*)</td><td>(.*)</td><td>(.*)</td><td>(.*)</td></tr></tbody></table>#U', $html1, $matches);
echo "<br>";
var_dump($matches);


получилось не совсем то что нужно...

авторarray(11) {
[0]=>
string(1024) "<tr align="center"><td>Приём</td><td>11.07.2012 00:00</td><td>350033</td><td>КРАСНОДАР 33</td><td>Единичный</td><td>0,295</td><td>1470</td><td>1470</td><td>432044</td><td>УЛЬЯНОВСК, УЛЬЯНОВСКАЯ ОБЛАСТЬ</td></tr><tr align="center"><td>Обработка</td><td>12.07.2012 00:00</td><td>350964</td><td>КРАСНОДАР МСЦ ЦОСП</td><td>Покинуло сортировочный центр</td><td>0,000</td><td>0</td><td>0</td><td></td><td></td></tr><tr align="center"><td>Обработка</td><td>17.07.2012 00:00</td><td>432099</td><td>УЛЬЯНОВСК ПОЧТАМТ</td><td>Покинуло сортировочный центр</td><td>0,000</td><td>0</td><td>0</td><td></td><td></td></tr><tr align="center"><td>Обработка</td><td>17.07.2012 07:53</td><td>432044</td><td>УЛЬЯНОВСК 44</td><td>Прибыло в место вручения</td><td>0,000</td><td>0</td><td>0</td><td></td><td></td></tr><tr align="center"><td>Вручение</td><td>18.07.2012 00:00</td><td><a href=javascript:Wind(41965)>432044</td><td>УЛЬЯНОВСК 44</td><td>Вручение адресату</td><td>0,295</td><td>1470</td><td>0</td><td></td><td></td></tr></tbody></table>"
[1]=>
string(5) "Приём"
[2]=>
string(16) "11.07.2012 00:00"
[3]=>
string(6) "350033"
[4]=>
string(12) "КРАСНОДАР 33"
[5]=>
string(9) "Единичный"
[6]=>
string(5) "0,295"
[7]=>
string(4) "1470"
[8]=>
string(4) "1470"
[9]=>
string(6) "432044"
[10]=>
string(827) "УЛЬЯНОВСК, УЛЬЯНОВСКАЯ ОБЛАСТЬ</td></tr><tr align="center"><td>Обработка</td><td>12.07.2012 00:00</td><td>350964</td><td>КРАСНОДАР МСЦ ЦОСП</td><td>Покинуло сортировочный центр</td><td>0,000</td><td>0</td><td>0</td><td></td><td></td></tr><tr align="center"><td>Обработка</td><td>17.07.2012 00:00</td><td>432099</td><td>УЛЬЯНОВСК ПОЧТАМТ</td><td>Покинуло сортировочный центр</td><td>0,000</td><td>0</td><td>0</td><td></td><td></td></tr><tr align="center"><td>Обработка</td><td>17.07.2012 07:53</td><td>432044</td><td>УЛЬЯНОВСК 44</td><td>Прибыло в место вручения</td><td>0,000</td><td>0</td><td>0</td><td></td><td></td></tr><tr align="center"><td>Вручение</td><td>18.07.2012 00:00</td><td><a href=javascript:Wind(41965)>432044</td><td>УЛЬЯНОВСК 44</td><td>Вручение адресату</td><td>0,295</td><td>1470</td><td>0</td><td></td><td>"
}
...
Рейтинг: 0 / 0
регулярки. помогите распарсить.
    #37888590
kkv79
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
а если так, без модификатора U
Код: php
1.
2.
3.
preg_match('#<td>(.*)</td><td>(.*)</td><td>(.*)</td><td>(.*)</td><td>(.*)</td><td>(.*)</td><td>(.*)</td><td>(.*)</td><td>(.*)</td><td>(.*)</td></tr></tbody></table>#', $html1, $matches);
echo "<br>";
var_dump($matches);


то получил что нужно во 2, 4, и 5 элементах массива, но имхо всё равно не правильно....
много лишнего в первом элементе
поправте плиз...

автор<br>array(11) {
[0]=>
string(2683) "<td><input type="text" id="BarCode" name="BarCode" size="14" maxlength="14" value="35003348084103"></input></td></tr><tr><td /><td><DIV id="lblBrcdErrMsg" style="COLOR: red; DISPLAY: inline; WIDTH: 50%; HEIGHT: 15px" ms_positioning="FlowLayout" /></td></tr></table><p><input type="hidden" id="searchsign" name="searchsign" /></p><input type="hidden" id="entryBarCode" name="entryBarCode" size="14" maxlength="14" value=""></input><p><input type="button" name="searchbarcode" onclick="CheckInputCode();" value="Найти"></input></p><h2>Результат поиска:</h2><table border="0" cellspacing="4" cellpadding="0"><tr valign="top"><th align="left">Внутрироссийский <br />почтовый идентификатор:</th><td><br />35003348084103</td></tr><tr valign="top"><th align="left"><p style="margin-top:10px">Принято к пересылке:</p></th><td><div style="margin-top:10px">КРАСНОДАР, КРАСНОДАРСКИЙ КРАЙ</div><div>Бандероль 1 класса с объявл. ценностью и налож. платежом</div><div>Без разряда</div><div> Без отметки</div></td></tr><tr valign="top"><th align="left"><div style="margin-top:10px">Отправитель:</div></th><td><div style="margin-top:10px"></div></td></tr><tr valign="top"><th align="left">Получатель:</th><td></td></tr></table><br /><table class="pagetext"><thead><tr align="center"><th rowspan="2">Операция</th><th rowspan="2">Дата</th><th colspan="2">Место проведения операции</th><th rowspan="2">Атрибут операции</th><th rowspan="2">Вес (кг.)</th><th rowspan="2">Объявл. ценность (руб.)</th><th rowspan="2">Налож. платёж (руб.)</th><th colspan="2">Адресовано</th></tr><tr align="center"><th>Индекс</th><th>Название ОПС</th><th>Индекс</th><th>Адрес</th></tr></thead><tbody><tr align="center"><td>Приём</td><td>11.07.2012 00:00</td><td>350033</td><td>КРАСНОДАР 33</td><td>Единичный</td><td>0,295</td><td>1470</td><td>1470</td><td>432044</td><td>УЛЬЯНОВСК, УЛЬЯНОВСКАЯ ОБЛАСТЬ</td></tr><tr align="center"><td>Обработка</td><td>12.07.2012 00:00</td><td>350964</td><td>КРАСНОДАР МСЦ ЦОСП</td><td>Покинуло сортировочный центр</td><td>0,000</td><td>0</td><td>0</td><td></td><td></td></tr><tr align="center"><td>Обработка</td><td>17.07.2012 00:00</td><td>432099</td><td>УЛЬЯНОВСК ПОЧТАМТ</td><td>Покинуло сортировочный центр</td><td>0,000</td><td>0</td><td>0</td><td></td><td></td></tr><tr align="center"><td>Обработка</td><td>17.07.2012 07:53</td><td>432044</td><td>УЛЬЯНОВСК 44</td><td>Прибыло в место вручения</td><td>0,000</td><td>0</td><td>0</td><td></td><td></td></tr><tr align="center"><td>Вручение</td><td>18.07.2012 00:00</td><td><a href=javascript:Wind(41965)>432044</td><td>УЛЬЯНОВСК 44</td><td>Вручение адресату</td><td>0,295</td><td>1470</td><td>0</td><td></td><td></td></tr></tbody></table>"
[1]=>
string(2480) "<input type="text" id="BarCode" name="BarCode" size="14" maxlength="14" value="35003348084103"></input></td></tr><tr><td /><td><DIV id="lblBrcdErrMsg" style="COLOR: red; DISPLAY: inline; WIDTH: 50%; HEIGHT: 15px" ms_positioning="FlowLayout" /></td></tr></table><p><input type="hidden" id="searchsign" name="searchsign" /></p><input type="hidden" id="entryBarCode" name="entryBarCode" size="14" maxlength="14" value=""></input><p><input type="button" name="searchbarcode" onclick="CheckInputCode();" value="Найти"></input></p><h2>Результат поиска:</h2><table border="0" cellspacing="4" cellpadding="0"><tr valign="top"><th align="left">Внутрироссийский <br />почтовый идентификатор:</th><td><br />35003348084103</td></tr><tr valign="top"><th align="left"><p style="margin-top:10px">Принято к пересылке:</p></th><td><div style="margin-top:10px">КРАСНОДАР, КРАСНОДАРСКИЙ КРАЙ</div><div>Бандероль 1 класса с объявл. ценностью и налож. платежом</div><div>Без разряда</div><div> Без отметки</div></td></tr><tr valign="top"><th align="left"><div style="margin-top:10px">Отправитель:</div></th><td><div style="margin-top:10px"></div></td></tr><tr valign="top"><th align="left">Получатель:</th><td></td></tr></table><br /><table class="pagetext"><thead><tr align="center"><th rowspan="2">Операция</th><th rowspan="2">Дата</th><th colspan="2">Место проведения операции</th><th rowspan="2">Атрибут операции</th><th rowspan="2">Вес (кг.)</th><th rowspan="2">Объявл. ценность (руб.)</th><th rowspan="2">Налож. платёж (руб.)</th><th colspan="2">Адресовано</th></tr><tr align="center"><th>Индекс</th><th>Название ОПС</th><th>Индекс</th><th>Адрес</th></tr></thead><tbody><tr align="center"><td>Приём</td><td>11.07.2012 00:00</td><td>350033</td><td>КРАСНОДАР 33</td><td>Единичный</td><td>0,295</td><td>1470</td><td>1470</td><td>432044</td><td>УЛЬЯНОВСК, УЛЬЯНОВСКАЯ ОБЛАСТЬ</td></tr><tr align="center"><td>Обработка</td><td>12.07.2012 00:00</td><td>350964</td><td>КРАСНОДАР МСЦ ЦОСП</td><td>Покинуло сортировочный центр</td><td>0,000</td><td>0</td><td>0</td><td></td><td></td></tr><tr align="center"><td>Обработка</td><td>17.07.2012 00:00</td><td>432099</td><td>УЛЬЯНОВСК ПОЧТАМТ</td><td>Покинуло сортировочный центр</td><td>0,000</td><td>0</td><td>0</td><td></td><td></td></tr><tr align="center"><td>Обработка</td><td>17.07.2012 07:53</td><td>432044</td><td>УЛЬЯНОВСК 44</td><td>Прибыло в место вручения</td><td>0,000</td><td>0</td><td>0</td><td></td><td></td></tr><tr align="center"><td>Вручение"
[2]=>
string(16) "18.07.2012 00:00"
[3]=>
string(37) "<a href=javascript:Wind(41965)>432044"
[4]=>
string(12) "УЛЬЯНОВСК 44"
[5]=>
string(17) "Вручение адресату"
[6]=>
string(5) "0,295"
[7]=>
string(4) "1470"
[8]=>
string(1) "0"
[9]=>
string(0) ""
[10]=>
string(0) ""
}
...
Рейтинг: 0 / 0
регулярки. помогите распарсить.
    #37888598
vkle
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Без регекспов:

Код: php
1.
2.
3.
4.
$a = array_reverse(explode('<tr align="center"><td>', $html1));
$a = explode('</td></tr></tbody></table>', $a[0]);
$a = explode('</td><td>', $a[0]);
var_dump($a);
...
Рейтинг: 0 / 0
8 сообщений из 8, страница 1 из 1
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / регулярки. помогите распарсить.
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]