Помогите написать регулярное выражения для парсера

Тема в разделе "Как сделать...", создана пользователем repacksman, 13 дек 2015.

  1. repacksman

    repacksman

    Регистр.:
    12 июн 2012
    Сообщения:
    154
    Симпатии:
    2
  2. klxr

    klxr Постоялец

    Регистр.:
    14 апр 2015
    Сообщения:
    51
    Симпатии:
    67
    Код:
    $html= file_get_contents('http://otsledit.com.ua/index.php?co=nova_poshta&nomer_pos=59000149694299');
    if(preg_match("/<table width=60%><tr><td align='right' width=50%><strong>.*?<\/strong><\/td><td width=50% align='left'>(.*?)<\/td><\/tr>/", $html, $matches))
    {
        echo strip_tags($matches[1]);
    }
    
     
    Последнее редактирование: 13 дек 2015
    repacksman нравится это.
  3. repacksman

    repacksman

    Регистр.:
    12 июн 2012
    Сообщения:
    154
    Симпатии:
    2
    Спасибо, все работает!! Можете еще помочь сделать проверку(if) есть ли на странице https://novaposhta.ua/tracking/?carg...59000146491260 текст "Одержувач відмовився від отримання відправлення". Чтоб можно было сменной задать разные значения в отличии есть ли такой текст на странице. Зарание спасибо)
     
  4. javx

    javx

    Регистр.:
    28 авг 2015
    Сообщения:
    521
    Симпатии:
    239
    preg_match("/(Одержувач відмовився від отримання відправлення)/", $html, $matches);
    сделай аналогично условию выше ;)
     
  5. repacksman

    repacksman

    Регистр.:
    12 июн 2012
    Сообщения:
    154
    Симпатии:
    2
    сделал вот так:

    Код:
                $link = file_get_contents("http://otsledit.com.ua/index.php?co=nova_poshta&nomer_pos=" . $ttn);
                   
                if (preg_match("/(Одержувач відмовився від отримання відправлення)/", $link, $matches)) {
        echo "Вхождение найдено.";
    } else {
        echo "Вхождение не найдено.";
    }
    
    пишет Вхождение не найдено
     
  6. klxr

    klxr Постоялец

    Регистр.:
    14 апр 2015
    Сообщения:
    51
    Симпатии:
    67
    думаю дело в том что у тебя скрипт сохранен на винде в кодировке windows-1251 а страница кот. нужно парсить в utf-8
    попробуй
    Код:
    $ttn= 59000146491260;
    $html = file_get_contents("https://novaposhta.ua/tracking/?cargo_number=" . $ttn);
    $str = iconv('WINDOWS-1251','UTF-8','Одержувач відмовився від отримання відправлення');
    if (preg_match("/({$str})/", $html)) {
        echo "Вхождение найдено.";
    } else {
        echo "Вхождение не найдено.";
    }
    
     
    repacksman нравится это.
  7. repacksman

    repacksman

    Регистр.:
    12 июн 2012
    Сообщения:
    154
    Симпатии:
    2
    У меня все равно не работает. Вы проверяли? У Вас работало?
     
  8. klxr

    klxr Постоялец

    Регистр.:
    14 апр 2015
    Сообщения:
    51
    Симпатии:
    67
    да, у меня работает,
    кроме кодировки не вижу других вариантов почему не работает

    еще проверь есть ли реально эта строка на этой странице которую ты парсишь
     
    repacksman нравится это.
  9. repacksman

    repacksman

    Регистр.:
    12 июн 2012
    Сообщения:
    154
    Симпатии:
    2
    Результат тот же. Вот как я сделал
    Код:
    $html = file_get_contents("https://novaposhta.ua/tracking/?cargo_number=59000146491260");
    $str = iconv('WINDOWS-1251','UTF-8','відмовився');
    if (preg_match('/(' .$str . ')/', $html, $matches)) {
      echo "Вхождение найдено.";
    } else {
      echo "Вхождение не найдено.";
    }
     
  10. klxr

    klxr Постоялец

    Регистр.:
    14 апр 2015
    Сообщения:
    51
    Симпатии:
    67
    только что проверил, этот код у меня работает и выводит "Вхождение найдено."
    возможно у тебя скрипт сохранен в другой кодировке, у меня в данном варианте в windows-1251
    если скрипт в utf-8 то преобразование iconv не нужно делать

    попробуй еще так
    Код:
    $html= file_get_contents("https://novaposhta.ua/tracking/?cargo_number=59000146491260");
    $str = urldecode('%D0%B2%D1%96%D0%B4%D0%BC%D0%BE%D0%B2%D0%B8%D0%B2%D1%81%D1%8F');
    if (preg_match('/(' .$str . ')/', $html, $matches)) {
        echo "Вхождение найдено.";
    } else {
        echo "Вхождение не найдено.";
    }
    
    может у тебя версия php какая-то очень древняя
    хотя тут ничего такого не используется и должно работать на старых
     
    Последнее редактирование: 13 дек 2015