[Регулярки & Mod_Rewrite] Задай вопрос, получи ответ.

Discussion in 'PHP' started by .:EnoT:., 19 Nov 2008.

Thread Status:
Not open for further replies.
  1. OnArs

    OnArs Banned

    Joined:
    1 Aug 2008
    Messages:
    211
    Likes Received:
    13
    Reputations:
    1
    Всем привет!

    Хочу парсить таблицу одного сайта.

    Таблица начинается вот с этого:
    PHP:
    <table id="bbtable" cellpadding="0" cellspacing="0">
    Заканчивается вот этим:
    PHP:
    </td></tr></table><div id="bbnotes"><span class="title">
    Делаю вот так:
    PHP:
    <?
    $responce file_get_contents("http://www.site.com/ges.aspx"); 
    $patern '|<table id="bbtable" cellpadding="0" cellspacing="0">(.*)</td></tr></table><div id="bbnotes"><span class="title">|Ui'
    preg_match($patern$responce$result);
    echo 
    $result[1];
    ?>
    Но увы ничего не выходит и судя по всему есть ошибки :)
    Подскажите пожалуйста как будет правильно и в чём ошибка. Большое Спасибо! ;)
     
  2. Pashkela

    Pashkela Динозавр

    Joined:
    10 Jan 2008
    Messages:
    2,750
    Likes Received:
    1,044
    Reputations:
    339
    PHP:
    <?
    $responce file_get_contents('http://www.site.com/ges.aspx'); 
    preg_match('/table(.*)id(.*)cellpadding(.*)cellspacing(.*)>(.*?)<\/td><\/tr><\/table><div(.*)id(.*)><span(.*)class(.*)>/s'$responce$result);
    echo 
    $result[5]; 
    ?>
     
  3. Ru}{eeZ

    Ru}{eeZ Elder - Старейшина

    Joined:
    19 Feb 2008
    Messages:
    454
    Likes Received:
    73
    Reputations:
    -5
    PHP:
    <?php
    $response 
    file_get_contents("http://www.site.com/ges.aspx");
    preg_match_all('|<table id="bbtable" cellpadding="0" cellspacing="0">(.*)</td></tr></table><div id="bbnotes"><span class="title">|'$response$result);
    echo 
    '<pre>'var_dump($result); echo '</pre>';
    ?> 
     
    #43 Ru}{eeZ, 4 Dec 2008
    Last edited: 4 Dec 2008
  4. Gifts

    Gifts Green member

    Joined:
    25 Apr 2008
    Messages:
    2,494
    Likes Received:
    807
    Reputations:
    614
    Pashkela Это особая уличная магия, использовать двадцать жадных подмасок, которые никогда не потребуются?

    OnArs Вместо .* используй [\s\S]* или добавь модификатор s
     
    _________________________
    #44 Gifts, 4 Dec 2008
    Last edited: 4 Dec 2008
  5. OnArs

    OnArs Banned

    Joined:
    1 Aug 2008
    Messages:
    211
    Likes Received:
    13
    Reputations:
    1
    Странно но не работает - я даже ссылку спалю :)
    http://www.moneyfacts.co.uk/money/mortgages/4/buy-to-let-mortgages.aspx
    Вкладка Buy-to-let

    т.е.:
    PHP:
    <?
    $responce file_get_contents('http://www.moneyfacts.co.uk/money/mortgages/4/buy-to-let-mortgages.aspx'); 
    preg_match('/table(.*)id(.*)cellpadding(.*)cellspacing(.*)>(.*?)<\/td><\/tr><\/table><div(.*)id(.*)><span(.*)class(.*)>/s'$responce$result);
    echo 
    $result[5]; 
    ?> 
     
  6. Pashkela

    Pashkela Динозавр

    Joined:
    10 Jan 2008
    Messages:
    2,750
    Likes Received:
    1,044
    Reputations:
    339
    Не будет такое работать. Наверное лучше не постить, не испробовав:)
     
  7. Ru}{eeZ

    Ru}{eeZ Elder - Старейшина

    Joined:
    19 Feb 2008
    Messages:
    454
    Likes Received:
    73
    Reputations:
    -5
    preg_match_all()
    http://ru2.php.net/preg_match_all

    и не пиши ты везде эти скобки, а только там, где тебе что-то нужно будет выводить, пиши []
     
  8. Gifts

    Gifts Green member

    Joined:
    25 Apr 2008
    Messages:
    2,494
    Likes Received:
    807
    Reputations:
    614
    OnArs
    PHP:
    $responce file_get_contents('http://www.moneyfacts.co.uk/money/mortgages/4/buy-to-let-mortgages.aspx'); 
    preg_match('#<table id="bbtable" cellpadding="0" cellspacing="0">([\s\S]*)</td></tr></table><div id="bbnotes"><span class="title">#Ui'$responce$result);
    echo 
    $result[1]; 
     
    _________________________
    1 person likes this.
  9. OnArs

    OnArs Banned

    Joined:
    1 Aug 2008
    Messages:
    211
    Likes Received:
    13
    Reputations:
    1
    Работает! Большое Спасибо!
    И всем кто отписался тоже бооольшое спасибо! :)
     
  10. OnArs

    OnArs Banned

    Joined:
    1 Aug 2008
    Messages:
    211
    Likes Received:
    13
    Reputations:
    1
    Хм... За исключением одного - почёму то переходя по ссылке _http://wwws.co.uk/money/mortFixed5, а не Buy To Let

    Как бы это исправить? =(

    // уже решил....
     
    #50 OnArs, 4 Dec 2008
    Last edited: 4 Dec 2008
  11. b3

    b3 Banned

    Joined:
    5 Dec 2004
    Messages:
    2,174
    Likes Received:
    1,157
    Reputations:
    202
    Есть страница, на ней по 50 ников юзверей, в исходнике они :
    между етими тегами, есесно uid у всех разный, нужна регулярка которая всех запихнет в массив. Я делал :
    ненаходит =\ находит, но не то что надо. С меня огромный плюсик, сижу уже больше часа.
     
  12. Solker

    Solker Elder - Старейшина

    Joined:
    4 May 2006
    Messages:
    175
    Likes Received:
    53
    Reputations:
    18
    PHP:
    preg_match_all(
    '#<a href="viewpro\.php\?uid=([0-9]+)" class="bold">(.+?)</a>#'
    $result
    $matches);
     
    1 person likes this.
  13. OnArs

    OnArs Banned

    Joined:
    1 Aug 2008
    Messages:
    211
    Likes Received:
    13
    Reputations:
    1
    И снова здравствуйте!

    На странице есть много ссылок вида:
    PHP:

    <a href="javascript:openWindow('/
    best-buys/fees/p/maqtp5tiYJWTZJiVkWlqZpJrnmixpqvaypXJxqWUdpakqpus2qZgr6l_ttbQpJeq2mXHrNSveLLIosbGpLWmoJWrnKukopXJ1nOmu7ldl6XRctqy1Jx2yNegiMKf1W-dmqSkndOinqHKpdLIz5w/')" 
    title="BM Solutions - Buy to Let">

    Как бы так заменить всё тело ссылки, я имею ввиду то, что находится внутри ковычек, там где сейчас яваскрипт, на то что мне нужно?

    Думаю, что в любом случае придётся пользоваться функцией str_replace, но вот как правильно составить регулярку?

    Пробую вот так:
    PHP:
    preg_match_all'<a href="(.+?)" title="BM Solutions - Buy to Let">'$result $matches );
    Но увы... Подскажите, что-нибудь, пожалуйста!
     
  14. Doom123

    Doom123 Elder - Старейшина

    Joined:
    11 Nov 2006
    Messages:
    749
    Likes Received:
    244
    Reputations:
    22
    PHP:
     preg_replace('#<a href=".+?" title="BM Solutions - Buy to Let">#im',$zamena,$result); 
    Попробуй так ..
     
    #54 Doom123, 6 Dec 2008
    Last edited: 6 Dec 2008
  15. Pashkela

    Pashkela Динозавр

    Joined:
    10 Jan 2008
    Messages:
    2,750
    Likes Received:
    1,044
    Reputations:
    339
    PHP:
    preg_match_all('/<a href="(.*)" title(.*)>/s'$list$result);
    echo 
    $result[1][0];
     
    1 person likes this.
  16. Doom123

    Doom123 Elder - Старейшина

    Joined:
    11 Nov 2006
    Messages:
    749
    Likes Received:
    244
    Reputations:
    22
    Pashkela * - означает что может не быть симолов вообще ...
    так что лучше использовать + ...
    и от жадности лечить тоже нада думаю .. вопросиком =)
     
    1 person likes this.
  17. Pashkela

    Pashkela Динозавр

    Joined:
    10 Jan 2008
    Messages:
    2,750
    Likes Received:
    1,044
    Reputations:
    339
    Это понятно, писано для данного конкретного случая, люблю поимпровизировать:)
     
  18. OnArs

    OnArs Banned

    Joined:
    1 Aug 2008
    Messages:
    211
    Likes Received:
    13
    Reputations:
    1
    Имено твой вариант работает...
    А ты можешь переделать это под preg_replace?
    Если не тяжело конечно...

    Но мне нужно имено тело href'а, а титл кстати меняется для каждой ссылки...
     
    #58 OnArs, 6 Dec 2008
    Last edited: 6 Dec 2008
  19. Pashkela

    Pashkela Динозавр

    Joined:
    10 Jan 2008
    Messages:
    2,750
    Likes Received:
    1,044
    Reputations:
    339
    если тебе надо только ОДИН раз спарсить ПЕРВУЮ попавшуюся ссылку с ТАКИМИ условиями, то конечно лучше preg_replace.

    А то, что "титл кстати меняется для каждой ссылки..." - именно у меня и предусмотренно

    PHP:
    <?
    preg_match('/<a href="(.*)" title(.*)>/s'$list$result);
    echo 
    $result[1];
    ?>
    про тело href-а не допонял - оно и есть, только без кавычек, если надо с кавычками, просто удали их из регулярки

    Тьфу блин, башка вообще уже не варит в пол-третьего:) В общем preg_replace как ты хочешь применить? Сохранить в файл и там заменить по тем условиям, что тебе надо? Сформулируй задачу почетче. Сколько таких ссылок на странице - 1 или несколько и т.д.
     
    #59 Pashkela, 6 Dec 2008
    Last edited: 6 Dec 2008
  20. AkyHa_MaTaTa

    AkyHa_MaTaTa Elder - Старейшина

    Joined:
    19 Mar 2007
    Messages:
    557
    Likes Received:
    306
    Reputations:
    27
    Если тока для href, то почти как указал Pashkela:
    <?
    preg_match('/<a href="(.*)" .*>/s',$a, $result);
    echo $result[1];
    ?>
     
Thread Status:
Not open for further replies.