1. Есть опять проблемы, хотя вроде бы все правильно пишешь, а результата нет, например:
$res=preg_match_all(\'/TBODY/s\'... выводит все TBODY ,а:
2. Теперь о моем прайсе:
20.02 05:30 | Товар1 Товар2 | 35 | onclick="return m(this)">26.92 id=r3_3143svsfd onclick="return m(this)">27.05 | 270.5
|
таких строк очень много
Пишу:
$res=preg_match_all(\'/(?:)([\\D]+?)(?: | )/s\',$order,$found); Выводит все Товар1 Товар2 изо всех строк. Теперь вырезаем еще | 35: $res=preg_match_all(\'/(?: | )([\\D]+?)(?: | )([\\d]*?)(?:<\\/B> | Ведь вроде правильно написал.
onclick="return m(this)">26.92 id=r3_3143svsfd onclick="return m(this)">27.05 Вот то что я написал для віделеного фрагмента, но оно не работает для поиска 26.92 и 27.05: /(?: | *?]>$)([0-9\\.]*?)(?:<\\/A> *?])([0-9\\.]*?)>$([0-9\\.]*?)(?:<\\/A>)/s как правильно писать? 3. И последний вопрос: Допустим вырезал я все строки, получилось у меня строка например: 20.02 05:30 Товар1 Товар2 35 26.92 27.05 270.5 Теперь это все надо вбить ее в базу данных соответственно с 6 полями, тоесть как имея такую строку получить доступ к выделенным подстрокам.
Записан
« Ответ #1 : 20 Февраля 2004, 13:06:32 »
Abram проще буде договориться с теми, кто прайс генерирует. Пусть они его генерируют либо в более чистом ХТМЛ либо вообще в каком-тодргом формате (CSV например)
Записан
First learn computer science and all the theory. Next develop a programming style. Then forget all that and just hack. ( George Carrette )
« Ответ #2 : 20 Февраля 2004, 14:24:59 »
По другому никак, ребята помогите времени уже почти нет!!!!!!!
Записан
« Ответ #3 : 20 Февраля 2004, 15:21:24 »
Abram никто здесь не будет разбираться с таким кривым ХТМЛ. Почему он не валидный ? Почему теги не закрываются ? ( | например)
Abram: но оно не работает для поиска 26.92 и 27.05: /\\d\\d\\.\\d\\d(?=<\\/A>)/s
Записан
First learn computer science and all the theory. Next develop a programming style. Then forget all that and just hack. ( George Carrette )
« Ответ #4 : 20 Февраля 2004, 15:22:26 »
опять форум лишний пробел вставил
Записан
First learn computer science and all the theory. Next develop a programming style. Then forget all that and just hack. ( George Carrette )
« Ответ #5 : 20 Февраля 2004, 15:51:38 »
Ну хорошо будем разбираться, а что за прикол с этим, какой здесь принцип действия регов? $res=preg_match_all(\'/TBODY/s\'... выводит все TBODY ,а: $res=preg_match_all(\'/$res=preg_match_all(\'/
Записан
« Ответ #6 : 20 Февраля 2004, 23:06:34 »
Abram В первом и третьем случае ты указываешь конкретные слова для поиска, пусть это TBODY и <. Во втором я бы минимизировал числитель, т.е. поставил не s а sU. Попробуй. Хотя если ты код привел правильно все должно искаться соответственно.
Записан
« Ответ #7 : 21 Февраля 2004, 01:09:17 »
Abram мама моя родная... ты хоть пытался разобраться в этом сам? Ответ на вопрос №1: что функция preg_match_all возвращает? <? $string = " <TBODY class=row1> <TR> <TD>20.02<BR>05:30 <TD class=lТовар1<BR>Товар2 <TD><B>35</B> <TD><A href=\\"http://link/\\" id=sfsd32dfs onclick=\\"return m(this)\\">26.92</A><BR><A href=\\"http://link/\\" id=r3_3143svsfd onclick=\\"return m(this)\\">27.05</A> <TD><B>270.5</B> </TR> "; preg_match_all("/<TBODY/s", $string, $matches); print_r($matches); ?>скопипейсти себе в редактор, не добавляя больше не строчки и ты увидишь, что оно выводит: Array ( - => Array (
- =>
Ты работаешь с тегами! и выводит в тело документа он тоже тег! следующий тег, который пойдет после того, что выведет print_r(), автоматически скажет твоему эксплореру закрыть тег , и после этого ты его увидишь только после того, как просмотришь исходный код документа.
Чтобы правильно работать во время парсинга html документов надо вплотную работать при выводе результатов с функцией [p]htmlspecialchars[/p] а для этого тебе правильно надо разобрать массив, который выдаст preg_match_all на строки!!!
Ответ на вопрос №2: Надо использовать опережающую и ретроспективную проверку, а так же использовать условие выбора!
вот результирующий код:
<? $string = " <TBODY class=row1> <TR> <TD>20.02<BR>05:30 <TD class=lТовар1<BR>Товар2 <TD><B>35</B> <TD><A href=\\"http://link/\\" id=sfsd32dfs onclick=\\"return m(this)\\">26.92</A><BR><A href=\\"http://link/\\" id=r3_3143svsfd onclick=\\"return m(this)\\">27.05</A> <TD><B>270.5</B> </TR> "; preg_match_all("/<TBODY/s", $string, $matches); foreach($matches as $item) { foreach($item as $tbody) { echo htmlspecialchars($tbody); } } //конец разборок с TBODY
echo " "; //начало разборок с парсингом Html preg_match_all("/(?<=>\\)(\\\\d*\\\\.\\\\d*)(?=<\\\\/A>|<\\\\/B>\\)/", $string, $matches); print_r($matches); ?>
ответ на вопрос №3 ты получишь, когда будет понятно, какие данные куда должны пойти из сформированной тобой строки.
Макс и другие чтобы форум не ставил пробел перед скобкой, надо перед ней поставить обратный слеш. Вот так выглядит реально строка, которую я пишу, чтобы получить то, что вы видите в коде выше: preg_match_all("/(?<=>\\)(\\\\d*\\\\.\\\\d*)(?=<\\\\/A>|<\\\\/B>\\)/", $string, $matches); тоже самое надо ставить обратный слеш перед обратным слешем, чтобы он его не кушал
« Последнее редактирование: 21 Февраля 2004, 01:32:11 от Yukko »
Записан
работа в Украине
|