За последние 24 часа нас посетили 20049 программистов и 1650 роботов. Сейчас ищут 1829 программистов ...

вытаскивать номер телефона и адрес сайта

Тема в разделе "Регулярные выражения", создана пользователем ckjet, 9 апр 2011.

  1. ckjet

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

    С нами с:
    6 апр 2011
    Сообщения:
    172
    Симпатии:
    2
    HTML:
    1. <div class="b-address">
    2. <a href="//maps.yandex.ru/?where&amp;ol=biz&amp;oid=1008561375" class="b-address__link" onmousedown="w(this,'254.212.281');" target="_blank"><i class="b-address__link-icon"></i>Москва, ул. Хуторская 2-я, 34</a>
    3. +7 (495) 646-03-78
    4. </div><div class="b-serp-item__links">
    5. <span class="b-serp-url b-serp-url_inline_yes">
    6. <span class="b-serp-url__item"><a href="http://www.kond.ru/" class="b-serp-url__link" onmousedown="w(this,'80.22.327','84=139,186=80,13=85');" target="_blank">kond.ru</a></span>
    7. </span>
    8. <span class="b-serp-url b-serp-url_inline_yes">
    9. <span class="b-serp-url__item"><a href="/yandsearch?date=&amp;text=%D0%BA%D0%BE%D0%BD%D0%B4%D0%B8%D1%86%D0%B8%D0%BE%D0%BD%D0%B5%D1%80&amp;site=&amp;rstr=-213&amp;lang=all&amp;within=0&amp;from_day=&amp;from_month=&amp;from_year=&amp;to_day=&amp;to_month=&amp;to_year=&amp;mime=all&amp;numdoc=50&amp;lr=11470&amp;tld=ua&amp;ncrnd=5340" class="b-serp-url__link" onmousedown="w(this,'80.22.287','84=139');">Москва</a></span>
    10. </span>
    11. <span class="b-serp-item__links-item b-serp-item__links-saved">
    12. <a class="b-serp-item__links-link" href="http://hghltd.yandex.net/yandbtm?fmode=inject&amp;url=http%3A%2F%2Fwww.kond.ru%2F&amp;text=%D0%BA%D0%BE%D0%BD%D0%B4%D0%B8%D1%86%D0%B8%D0%BE%D0%BD%D0%B5%D1%80&amp;l10n=ru&amp;sign=35fd01a00fc41fe7dc84e66467d6d758&amp;keyno=0" onmousedown="w(this,'80.22.337','84=139');" target="_blank" title="Сохранённая копия страницы на сервере Яндекса">копия</a>
    13. </span>
    14. <span class="b-serp-item__links-item">
    15. <a class="b-serp-item__links-link" href="/yandsearch?text=%D0%BA%D0%BE%D0%BD%D0%B4%D0%B8%D1%86%D0%B8%D0%BE%D0%BD%D0%B5%D1%80&amp;rstr=0-1&amp;site=kond.ru&amp;lr=11470" onmousedown="w(this,'80.22.336','84=139');" title="Поискать «кондиционер» на сайте kond.ru">ещё</a>
    16. </span>
    17. </div>
    Из этого куска нужно вытащить +7 (495) 646-03-78 и kond.ru помогите с регулярным. Вот как пытался:
    PHP:
    1. /<i class="b-address__link-icon"><\/i>(.*?)<\/a>(.*?)<\/div>(.*?)</div><div class="b-serp-item__links"><span class="b-serp-url b-serp-url_inline_yes"><span class="b-serp-url__item"><a href="(.*?)" class="b-serp-url__link"/s
     
  2. Crayday

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

    С нами с:
    7 апр 2011
    Сообщения:
    26
    Симпатии:
    0
    Какая-то, по правде, очень извращённая попытка безумно усложнить то, что сделать просто.

    Что означает здесь "</div>"? Мало того, что символ косой черты не экранирован, так этого div и просто нет в описанном выше html.

    Дальше в регулярном выражении встречаются множество тегов, которые не отделены друг от друга ничем, в то время как в указанном html они отделены пробелами, табуляцией и переносом строки.

    Напишите отдельные регулярные выражения для телефона и желанного адреса. Для адреса, например, будет достаточно:
    /<a href="(.*?)" class="b-serp-url__link"/

    Ну или добавьте в свой код между тегами \s* и уберите лишний div.
     
  3. ckjet

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

    С нами с:
    6 апр 2011
    Сообщения:
    172
    Симпатии:
    2
    PHP:
    1. /<i class="b-address__link-icon"><\/i>(.*?)<\/a>(.*?)<\/div>(.*?)<div class="b-serp-item__links">\s+<span class="b-serp-url b-serp-url_inline_yes">\s+<span class="b-serp-url__item">\s+<a href="(.*?)" class="b-serp-url__link"/s
    Выдает пустой массив
     
  4. Crayday

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

    С нами с:
    7 апр 2011
    Сообщения:
    26
    Симпатии:
    0
    Я писал \s*, а вы написали \s+, то есть обязательно потребовали наличие какого-либо пробельного символа и вставили эту конструкцию там, где надо, и там, где не надо =) Замените "+" на "*" и всё будет работать (хотя выражение по-прежнему выглядит странным, но зато работает).
     
  5. ckjet

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

    С нами с:
    6 апр 2011
    Сообщения:
    172
    Симпатии:
    2
    Поставил \s* тоже самое, пустой массив

    PHP:
    1. /<i class="b-address__link-icon"><\/i>(.*?)<\/a>(.*?)<\/div>(.*?)<div class="b-serp-item__links">\s*<span class="b-serp-url b-serp-url_inline_yes">\s*<span class="b-serp-url__item">\s*<a href="(.*?)"class="b-serp-url__link"/s
     
  6. Crayday

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

    С нами с:
    7 апр 2011
    Сообщения:
    26
    Симпатии:
    0
    Ооох. Это уже какая-то возня получается. Теперь вы удалили пробел перед class="b-serp-url__link"/s , который до этого там был. Разумеется, если добавлять такие маленькие описки в выражение, то оно никогда не заработает.

    PHP:
    1.  
    2. <?
    3. $content = <<<EOF
    4. <div class="b-address">
    5.  <a href="//maps.yandex.ru/?where&amp;ol=biz&amp;oid=1008561375" class="b-address__link" onmousedown="w(this,'254.212.281');" target="_blank"><i class="b-address__link-icon"></i>Москва, ул. Хуторская 2-я, 34</a>
    6.  +7 (495) 646-03-78
    7.  </div><div class="b-serp-item__links">
    8.  <span class="b-serp-url b-serp-url_inline_yes">
    9.  <span class="b-serp-url__item"><a href="http://www.kond.ru/" class="b-serp-url__link" onmousedown="w(this,'80.22.327','84=139,186=80,13=85');" target="_blank">kond.ru</a></span>
    10.  </span>
    11.  <span class="b-serp-url b-serp-url_inline_yes">
    12.  <span class="b-serp-url__item"><a href="/yandsearch?date=&amp;text=%D0%BA%D0%BE%D0%BD%D0%B4%D0%B8%D1%86%D0%B8%D0%BE%D0%BD%D0%B5%D1%80&amp;site=&amp;rstr=-213&amp;lang=all&amp;within=0&amp;from_day=&amp;from_month=&amp;from_year=&amp;to_day=&amp;to_month=&amp;to_year=&amp;mime=all&amp;numdoc=50&amp;lr=11470&amp;tld=ua&amp;ncrnd=5340" class="b-serp-url__link" onmousedown="w(this,'80.22.287','84=139');">Москва</a></span>
    13.  </span>
    14.  <span class="b-serp-item__links-item b-serp-item__links-saved">
    15.  <a class="b-serp-item__links-link" href="http://hghltd.yandex.net/yandbtm?fmode=inject&amp;url=http%3A%2F%2Fwww.kond.ru%2F&amp;text=%D0%BA%D0%BE%D0%BD%D0%B4%D0%B8%D1%86%D0%B8%D0%BE%D0%BD%D0%B5%D1%80&amp;l10n=ru&amp;sign=35fd01a00fc41fe7dc84e66467d6d758&amp;keyno=0" onmousedown="w(this,'80.22.337','84=139');" target="_blank" title="Сохранённая копия страницы на сервере Яндекса">копия</a>
    16.  </span>
    17.  <span class="b-serp-item__links-item">
    18.  <a class="b-serp-item__links-link" href="/yandsearch?text=%D0%BA%D0%BE%D0%BD%D0%B4%D0%B8%D1%86%D0%B8%D0%BE%D0%BD%D0%B5%D1%80&amp;rstr=0-1&amp;site=kond.ru&amp;lr=11470" onmousedown="w(this,'80.22.336','84=139');" title="Поискать «кондиционер» на сайте kond.ru">ещё</a>
    19.  </span>
    20.  </div>
    21. EOF;
    22.  
    23. $pattern = '/<i class="b-address__link-icon"><\/i>(.*?)<\/a>(.*?)<\/div>(.*?)<div class="b-serp-item__links">\s*<span class="b-serp-url b-serp-url_inline_yes">\s*<span class="b-serp-url__item">\s*<a href="(.*?)" class="b-serp-url__link"/s';
    24.  
    25. preg_match($pattern, $content, $anls);
    26.  
     
  7. ckjet

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

    С нами с:
    6 апр 2011
    Сообщения:
    172
    Симпатии:
    2
    спасибо, сработало :)