Найти ссылку на странице

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

Статус темы:
Закрыта.
Модераторы: xpert13
  1. Stripe

    Stripe

    Регистр.:
    21 окт 2007
    Сообщения:
    164
    Симпатии:
    9
    Есть страница с несколькими ссылками, как составить регулярку, которая определит есть или нет на странице именно моя ссылка?
     
  2. Nevep

    Nevep Постоялец

    Регистр.:
    16 дек 2009
    Сообщения:
    59
    Симпатии:
    8
    PHP:
    preg_match('/<a.*?href=.*?>.*?<\/a>/is',$body);
    Если именно твоя, то:
    PHP:
    preg_match('/<a.*?href="http:\/\/твой_домен.ru\/">.*?<\/a>/is',$body);
     
    Delayer и Stripe нравится это.
  3. SimpleWarrior

    SimpleWarrior Писатель

    Регистр.:
    25 дек 2009
    Сообщения:
    9
    Симпатии:
    1
    Тут регулярные выражения не так уж и нужны, вполне можно обойтись функцией strstr($html, $link).
     
  4. fastpars

    fastpars Создатель

    Регистр.:
    7 апр 2010
    Сообщения:
    23
    Симпатии:
    7
    Это в случае если ссылка статическая ...
     
  5. fly21

    fly21 Создатель

    Регистр.:
    11 авг 2009
    Сообщения:
    19
    Симпатии:
    2
    А если ссылка и динамическая, то Вы все равно разбираете html код.
    Можно и так попробывать без регулярок:
    Код:
    $num = substr_count(Где_ищем, что_ищем);
    if ( $num > 0 ) {
      echo "Ссылка встречается: ".$num." раз!";
    } else {
      echo "Ссылки на странице НЕТ!";
    }
    
     
  6. fastpars

    fastpars Создатель

    Регистр.:
    7 апр 2010
    Сообщения:
    23
    Симпатии:
    7
    Некоторые сайты добавляют перед вашей ссылкой свою типа
    href="http://qwerty.ком/рандом?site=http://jagajaga.ком/рандом число"
    и таких ссылок много.
    То тут проще будет через регулярку.
    А вообще мне всё проще через регулярку =)
     
  7. xxlbozman

    xxlbozman Писатель

    Регистр.:
    25 ноя 2008
    Сообщения:
    7
    Симпатии:
    0
    немного дополню Nevep
    PHP:
    preg_match('/<a(.*?)href="http:\/\/твой_домен.ru(.*?)">(.*?)<\/a>/is',$body); 
    Может я что не так делаю, но у меня почему то кончтрукция .*? без скобок не работает :)
     
  8. diavolic

    diavolic

    Регистр.:
    17 мар 2010
    Сообщения:
    522
    Симпатии:
    102

    лучше стараться заменять "точку" на более применимый символ. например в тексте выше
    HTML:
    <a(.*?)
    можно смело заменить на
    HTML:
    <a[^>]+
    знак ? будет уже не нужен, ибо скобка в любом случае должна закрывать тег
     
  9. CNiks0N

    CNiks0N lamp.root

    Регистр.:
    28 ноя 2008
    Сообщения:
    230
    Симпатии:
    48
    Я бы лучше сделал так:
    Код:
    preg_match('/href=(\'|")http:\/\/твой_домен.ru(.*?)(\'|")/U', $body, $finded);
    т.к. некоторые "умные" верстальщики ставят ссылку в href='' , или программеры при выводе использую ' вместо "
     
  10. gre4a

    gre4a Создатель

    Регистр.:
    19 мар 2009
    Сообщения:
    10
    Симпатии:
    2
    http:\/\/домен[^'"\s>]+ -выдаст все урлы на ваш сайт со страницы
    http:\/\/домен[^'"\s>]+[^<>]*> - выдаст все урлы на ваш сайт которые внутри тегов (обычно это <a>)
     
    Stripe нравится это.
Статус темы:
Закрыта.