За последние 24 часа нас посетили 18078 программистов и 1590 роботов. Сейчас ищут 1250 программистов ...

Ооочень простая регулярка...

Тема в разделе "Регулярные выражения", создана пользователем kit, 7 дек 2012.

  1. kit

    kit Активный пользователь

    С нами с:
    18 дек 2006
    Сообщения:
    331
    Симпатии:
    1
    Адрес:
    местный
    ... но у меня не получается :(
    есть текст (html-код):
    <tr>
    <td class="fp_title"><div><a href="en_services_fuel_prices_country?id=RUS">Russian Federation</a></div></td>
    <td class="fp_number"><div>RUB</div></td>
    <td class="fp_number"><div>31.21</div></td>
    <td class="fp_number"><div>34.40</div></td>
    <td class="fp_number"><div>31.92</div></td>
    </tr>

    Задача собрать в массив значения из текста, которые выделены синим.
    Пишу код:
    Код (Text):
    1. $fh = @fopen('http://www.url.ru','r');
    2. if($fh)
    3. {
    4.     while(!feof($fh)) @$text.=fread($fh, 4096);
    5.     fclose($fh);
    6. //  echo $text;
    7.     preg_match ("#
    8.     <tr>
    9.         <td class=\"fp_title_color\"><div><a href=\"en_services_fuel_prices_country?id=(.*?)\">(.*?)</a></div></td>
    10.         <td class=\"fp_number_color\"><div>(.*?)</div></td>
    11.         <td class=\"fp_number_color\"><div>(.*?)</div></td>
    12.         <td class=\"fp_number_color\"><div>(.*?)</div></td>
    13.         <td class=\"fp_number_color\"><div>(.*?)</div></td>
    14.     </tr>
    15.     #i", $text, $regs);
    16.     echo "<pre>";
    17.     print_r($regs);
    18. }
    19. else echo "'error'";
    Результат:
    Array
    (
    )
    Т.е. страница значениями не испорчена :)
    Подскажите правильный код, где ошибка?
    Заранее спасибо!
     
  2. YSandro

    YSandro Старожил

    С нами с:
    7 апр 2011
    Сообщения:
    2.523
    Симпатии:
    2
    Код (PHP):
    1. preg_match('#id=(\w*)">(.*)<.*<div>(.*)</div>.*<div>(.*)</div>.*<div>(.*)</div>.*<div>(.*)</div>#iUs', $text, $regs); 
     
  3. kit

    kit Активный пользователь

    С нами с:
    18 дек 2006
    Сообщения:
    331
    Симпатии:
    1
    Адрес:
    местный
    Спасибо! Не плохо, но не мовсем ожидаемый результат:
    id=LV">Latvia</a></div></td>
    <td class="fp_number_color"><div>LVL</div></td>
    <td class="fp_number_color"><div>0.947</div></td>
    <td class="fp_number_color"><div>0.962</div></td>
    <td class="fp_number_color"><div>0.937</div>
    На значения не обращайте внимания, сейчас это не принципиально, главное избавиться от тэгов.
     
  4. YSandro

    YSandro Старожил

    С нами с:
    7 апр 2011
    Сообщения:
    2.523
    Симпатии:
    2
    Что значит не ожидаемый? В первом случае выводит всё, что подсветили синим
    Код (Text):
    1. Array(
    2.     [1] => RUS
    3.     [2] => Russian Federation
    4.     [3] => RUB
    5.     [4] => 31.21
    6.     [5] => 34.40
    7.     [6] => 31.92
    8. )
    Во втором случае с
    id=LV">Latvia</a></div></td>
    <td class="fp_number_color"><div>LVL</div></td>
    <td class="fp_number_color"><div>0.947</div></td>
    <td class="fp_number_color"><div>0.962</div></td>
    <td class="fp_number_color"><div>0.937</div>
    выводит
    Код (Text):
    1. Array(
    2.     [1] => LV
    3.     [2] => Latvia
    4.     [3] => LVL
    5.     [4] => 0.947
    6.     [5] => 0.962
    7.     [6] => 0.937
    8. )
    Что ещё ожидается то?
    Теги не выводит, значения в исходном тексте могут быть любые, регулярке это не важно. Так что не понятно, что хотите.
     
  5. kit

    kit Активный пользователь

    С нами с:
    18 дек 2006
    Сообщения:
    331
    Симпатии:
    1
    Адрес:
    местный
    Вот что выводится:
    id=LV">Latvia
    LVL
    0.947
    0.962
    0.937
    При просмотре HTML-кода:
    Код (Text):
    1. id=LV">Latvia</a></div></td>
    2.         <td class="fp_number_color"><div>LVL</div></td>
    3.         <td class="fp_number_color"><div>0.947</div></td>
    4.         <td class="fp_number_color"><div>0.962</div></td>
    5.         <td class="fp_number_color"><div>0.937</div>
    На значения действительно не надо обращать внимания. в любом случае результата:
    Код (Text):
    1. Array(
    2.     [1] => LV
    3.     [2] => Latvia
    4.     [3] => LVL
    5.     [4] => 0.947
    6.     [5] => 0.962
    7.     [6] => 0.937
    8. )
    не наблюдается

    Добавлено спустя 12 минут 23 секунды:
    Все! Разобрался! Надо кавычки заслешить:
    Код (PHP):
    1. preg_match('#id=(\w*)\">(.*)<.*<div>(.*)</div>.*<div>(.*)</div>.*<div>(.*)</div>.*<div>(.*)</div>#iUs', $text, $regs);  
    Спасибо!
     
  6. YSandro

    YSandro Старожил

    С нами с:
    7 апр 2011
    Сообщения:
    2.523
    Симпатии:
    2
    У меня без слешей работает.