За последние 24 часа нас посетили 21144 программиста и 1634 робота. Сейчас ищет 1491 программист ...

Вытащить ссылки из html кода

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

  1. sx000

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

    С нами с:
    28 авг 2010
    Сообщения:
    35
    Симпатии:
    0
    Перечитал по регепсам. Делаю все как описано, но елки палки не идет, что то у меня это. Не даются они мне не как! Помогите разобраться.
    Код (Text):
    1.     <div class="data">
    2.     <div class="title">
    3. <a class="title" href="http://site.com/sdfkjhskdjfsjc">hssdfsfscskncj11111 dfdf</a>
    4.         </div>
    И таких ссылок на странице очень много. Мне надо их все достать и записать в файл.

    Я ему пишу:
    Код (Text):
    1. ^\s<div class=\"data\">\s<div class=\"title\">\s<a class=\"title\" href=\"([http].?)\">.<\/a>\s<\/div>
    Ну и так и сяк. не работает
    Ну что я не так сделал? Я же указал ему, запомнить надо то что в круглых скобках, а именно: http://site.com/sdfkjhskdjfsjc. Пожалуйста поясните!
     
  2. titch

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

    С нами с:
    18 дек 2010
    Сообщения:
    847
    Симпатии:
    0
    preg_match_all('/href="([^"]*)"/', ....
     
  3. sx000

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

    С нами с:
    28 авг 2010
    Сообщения:
    35
    Симпатии:
    0
    нет, мне надо соблюсти конструкцию как я дал. Там в коде много всяких ссылок надо именно из подобный конструкции. И вопрос вам, почему кавычки не экранируете? Это нормально?
     
  4. titch

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

    С нами с:
    18 дек 2010
    Сообщения:
    847
    Симпатии:
    0
    тогда сама регулярка будет что-то вроде:
    '/<div class="data">\s*<div class="title">\s*<a class="title" href="([^"]*)">.*?</a>\s*</div>/si'

    кавычки я не экранирую, потому что внешние у меня апострофы, а не двойные кавычки. меньше парюсь
     
  5. sx000

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

    С нами с:
    28 авг 2010
    Сообщения:
    35
    Симпатии:
    0
    ([^"]*) большое вас спасибо работает, а вот это участок не могли бы пояснить? Ну то что в скобках, понятно надо запомнить, а крыша в скобках квадратных это отрицание что не должно быть кавычек в данном фрагменте, * - это значит помнить все. Ну и суммарно помнить все, если нет кавычек. Я верно понял?
     
  6. sx000

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

    С нами с:
    28 авг 2010
    Сообщения:
    35
    Симпатии:
    0
    PHP:
    1.     preg_match('/<div class="data">\s*<div class="title">\s*<a class="title" href="([^"]*)">.*?</a>\s*</div>/si',$page,$mathces);
    2.     $rrr=$mathces[0];
    Warning: preg_match(): Unknown modifier 'a' in /usr/home/user/www/test.com/ho.php on line 54
    54 строка как раз и есть preg_match В чем может быть проблема?
     
  7. titch

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

    С нами с:
    18 дек 2010
    Сообщения:
    847
    Симпатии:
    0
    ну... термин помнить/не_помнить уместен скорее к группированию, т.е. конструкции вида ()
    ([^"]*) подробно:
    () группа, т.е. строка, которая удовлетворит условию в скобках будет сохранена
    [] набор. указывает на символ, который допустим в наборе. [abc] подходит к 'a', 'b' или 'c'. если у вас будет запись [^abc] то под эту конструкцию попадет любой символ, кроме символов a, b или c.
    * показывает, что токен, который предшествовал * может встретиться 0 или более раз
     
  8. sx000

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

    С нами с:
    28 авг 2010
    Сообщения:
    35
    Симпатии:
    0
    * - те это квантификатор, а я думал он в фигурных скобках всегда пишется :) Спасибо за подробное объяснение
     
  9. titch

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

    С нами с:
    18 дек 2010
    Сообщения:
    847
    Симпатии:
    0
    символ / показывает конец регулярного выражения. вот его нужно экранировать или заменить стиль на перл #. тогда будет:
    PHP:
    1. <?
    2. preg_match('#<div class="data">\s*<div class="title">\s*<a class="title" href="([^"]*)">.*?</a>\s*</div>#si',$page,$matches);
    3.  
    или
    PHP:
    1. <?
    2. preg_match('/<div class="data">\s*<div class="title">\s*<a class="title" href="([^"]*)">.*?<\/a>\s*<\/div>/si',$page,$matches);
    3.