Братки! Помогите! Мне не хватает знаний, а очень нужно сделать вот что.
Есть html прайс с такой структурой:
......
<---TOP--->
<--KONTENT-->
<-1->
<-2->
Название товара | Цена1 | Цена2 | ...
---|
Мороженое | 45 | 342 | .................
|
........
Дальше в такой же последовательности <-1-><-2-> 10 видов фирм со списком продукции
Нужно в результате работы скрипта получить базу данных:
Таблица 1. Код фирмы Мороженое 45 342 ...
..........
Таблица2 Код фирмы Название фирмы
<--/KONTENT-->
<---BOTTOM--->
Читал про регулярные выражения, мощная штука. Да чтоб разобраться нужно чтоб кто-то грамотный объяснил как ето работает.
Алгоритм интуитивно чувствую: считываем файл, а потом в масив "колбасим" по 2 части с , а потом уже отдельные части, но как это записать "РЕГУЛЯРНО"?
Может как-то по другому можно, подскажите плз, время жмет.
Язык написания PHP4, забыл однако
ИМХО здесь проще будет через preg_split() разбить прайс на массив по строке
<-1->и потом работать в цикле с каждым элементом массива (кроме первого элемента - там будет "шапка" прайса)
Спасиб Макс за ответ, но тут еще такие рассуждения:
Нужно еще чтобы разбор прайса был быстрым, так как он очень большой, много фирм, большой асортимент товара. Я слышал, что регулярные выражения работают очень быстро. Мне нужен самый оптимальный вариант
Abram
все зависит от того, как ты напишешь регулярное выражение, сколько текста надо отпарсить.
Abram:
Я слышал, что регулярные выражения работают очень быстро
если правильно напишешь - то будут работать быстро.
Вообще я стормозил можно и простым explode-ом рабить на массив.
Не понимаю, зачем нужен оптимальный вариант, ведь прайс заливается в БД не каждую минуту.
Если будет тормозить, то можно будет написать без регов, только с использованием строков функций ([p]substr[/p], [p]strpos[/p])
Ну я понял принцип, разберусь дальше, ну а так для опыта регами как надо было бы писать?
Хотя бы коротко структуру програмы можешь написать?
примерно так (после разбивки explode-ом на массив):
получить название фирмы:
/(?<=\\)[^<]+?(?=\\<\\/H2\\>)/s
получить список товаров и цены
/(?:)([^<>]+?)(?:<\\/td> | )(\\d+)(?:<\\/td> | )(\\d+)(?:<\\/td> |
)/s
тут в реги форум лишние пробелы повставлял :(