1. Есть опять проблемы, хотя вроде бы все правильно пишешь, а результата нет, например:
$res=preg_match_all(\'/TBODY/s\'... выводит все TBODY ,а:
$res=preg_match_all(\'/$res=preg_match_all(\'/
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\\.]*?)(?:<\\/A>)/s как правильно писать? 3. И последний вопрос: Допустим вырезал я все строки, получилось у меня строка например: 20.02 05:30 Товар1 Товар2 35 26.92 27.05 270.5 Теперь это все надо вбить ее в базу данных соответственно с 6 полями, тоесть как имея такую строку получить доступ к выделенным подстрокам.
Abram проще буде договориться с теми, кто прайс генерирует. Пусть они его генерируют либо в более чистом ХТМЛ либо вообще в каком-тодргом формате (CSV например)
По другому никак, ребята помогите времени уже почти нет!!!!!!!
Abram никто здесь не будет разбираться с таким кривым ХТМЛ. Почему он не валидный ? Почему теги не закрываются ? ( | например)
Abram: но оно не работает для поиска 26.92 и 27.05: /\\d\\d\\.\\d\\d(?=<\\/A>)/s
опять форум лишний пробел вставил :(
Ну хорошо будем разбираться, а что за прикол с этим, какой здесь принцип действия регов?
$res=preg_match_all(\'/TBODY/s\'... выводит все TBODY ,а: $res=preg_match_all(\'/$res=preg_match_all(\'/
Abram В первом и третьем случае ты указываешь конкретные слова для поиска, пусть это TBODY и <. Во втором я бы минимизировал числитель, т.е. поставил не s а sU. Попробуй. Хотя если ты код привел правильно все должно искаться соответственно.
Abram мама моя родная... ты хоть пытался разобраться в этом сам? Ответ на вопрос №1: что функция preg_match_all возвращает?
$string = "
20.02 05:30
| Товар2
| 35
| onclick=\\"return m(this)\\">26.92 id=r3_3143svsfd onclick=\\"return m(this)\\">27.05
| 270.5
| "; preg_match_all("/print_r($matches); ?> скопипейсти себе в редактор, не добавляя больше не строчки и ты увидишь, что оно выводит: Array ( - => Array (
- =>
Ты работаешь с тегами! и выводит в тело документа он тоже тег! следующий тег, который пойдет после того, что выведет print_r(), автоматически скажет твоему эксплореру закрыть тег , и после этого ты его увидишь только после того, как просмотришь исходный код документа.
Чтобы правильно работать во время парсинга html документов надо вплотную работать при выводе результатов с функцией [p]htmlspecialchars[/p] а для этого тебе правильно надо разобрать массив, который выдаст preg_match_all на строки!!!
Ответ на вопрос №2: Надо использовать опережающую и ретроспективную проверку, а так же использовать условие выбора!
вот результирующий код:
$string = "
20.02 05:30
| Товар2
| 35
| onclick=\\"return m(this)\\">26.92 id=r3_3143svsfd onclick=\\"return m(this)\\">27.05
| 270.5
| "; preg_match_all("/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); тоже самое надо ставить обратный слеш перед обратным слешем, чтобы он его не кушал
|