Всем привет! У меня есть код парсинга цен, все работает как надо, но появилась загвоздка.... Вот пример кода для парсинга: HTML: ... <tr> <td><span class="name">Товар 1</span></td> <td><span class="price">123 руб.</span></td> </tr> <tr> <td><span class="name">Товар 2</span></td> <td><span class="price">543 руб.</span></td> </tr> <tr> <td><span class="name">Товар 3</span></td> <td><span class="price">8765 руб.</span></td> </tr> ... Вот регулярка для парсинга: PHP: ... preg_match_all("/<tr>.*<td><span class=\"name\">(.*)<\/span><\/td>.*<td><span class=\"price\">(.*)\s+руб\.<\/span><\/td>.*<\/tr>/isU", $content, $match, PREG_PATTERN_ORDER); for ($i = 0; $i < count($match[1]); $i++) { echo $match[1][$i]." - "; echo $match[2][$i]."<br>"; } ... Тут проблем нет, все ок! Но появилась задача пропарсить вот такой код: HTML: ... <tr> <td><span class="name">Товар 1</span></td> <td><span class="price">123 руб.</span></td> </tr> <tr> <td><span class="name">Товар 1</span></td> <td><span class="price_old">543 руб.</span><span class="price_new">1111 руб.</span></td> </tr> <tr> <td><span class="name">Товар 1</span></td> <td><span class="price">8765 руб.</span></td> </tr> ... Мне надо выводить только реальные цены, а значит старая цена мне не нужна. И я пытаюсь сделать это так: PHP: ... preg_match_all("/<tr>.*<td><span class=\"name\">(.*)<\/span><\/td>.*<td>(<span class=\"price\">)|(<span class=\"price_new\">)(.*)\s+руб\.<\/span><\/td>.*<\/tr>/isU", $x, $match, PREG_PATTERN_ORDER); for ($i = 0; $i < count($match[1]); $i++) { echo $match[1][$i]." - "; echo $match[2][$i]."<br>"; } ... При таком раскладе у меня получается не правильный результат: Код (Text): Товар 1 - Товар 2 - Т.е. получается мне нужно сделать условие для регулярки - совпадение при class= "price_new" и "price". Помогите решить эту задачу пожалуйста...
preg_match_all("/<tr>.*<td><span class=\"name\">(.*)<\/span><\/td>.*<td><span class=\"(?rice|price_new)\">(.*)\s+руб\.<\/span><\/td>.*<\/tr>/isU", $content, $match, PREG_PATTERN_ORDER); всё остальное без изменений оставь... по идее должно работать
titch, спасибо что помогаешь! Я попробовал рез. не тот все равно: Код (Text): Товар 1 - 123 Товар 2 - 8765
preg_match_all("/<tr>.*<td><span class=\"name\">(.*)<\/span><\/td>.*<td>.*<span class=\"(?rice|price_new)\">(.*)\s+руб\.<\/span>.*<\/td>.*<\/tr>/isU", $content, $match, PREG_PATTERN_ORDER); а так?
не ?: а (? таким образом создается группа, но на неё не выделяется память в стеке. т.е. такая запись позволяется пользоваться всеми благами группы, но при этом в результирующем массиве её нет