За последние 24 часа нас посетили 17858 программистов и 1286 роботов. Сейчас ищут 1436 программистов ...

Поиск ссылок на странице

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

Статус темы:
Закрыта.
  1. mephy

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

    С нами с:
    21 мар 2007
    Сообщения:
    3
    Симпатии:
    0
    Есть примерно 70 страниц html, в каждой по 25 пронумерованных ссылок.
    Нужно все их выдернуть в txt.

    вид ссылок:

    5. (пробелы, font'ы.. от 4 до 40 символов) <a href="нужная ссылка">
    (много мусора =)
    6. (пробелы, font'ы.. от 4 до 40 символов) <a href="нужная ссылка2">

    Пробовал так

    preg_match('{5.+?href=([a-z0-9.://-]+)}is', $str, $pocket) or Die("error");
    или
    preg_match('{6.[^href]+?href=([a-z0-9.://-]+)}is', $str, $pocket) or Die("error");


    в любом случае он периодически соскакивает не на ближайший href, а через 1-2-3...
     
  2. Anonymous

    Anonymous Guest

    обычно делаю просто так, чтоб не морочится с извратными регулярками =)
    PHP:
    1.  
    2. <?
    3. preg_match_all('/<a(.*)>(.*)<\/a>/isU',$data,$links);
    4. $data = implode('',$links[1]);
    5. preg_match_all('/href=(.*)(\s|>|#|\/>){1}/isU',$data,$all_links);
    6. ?>
    7.  
    Но с регуляркоми у меня плохо, наверняка кто нибудть посоветует решение лучше...
     
  3. mephy

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

    С нами с:
    21 мар 2007
    Сообщения:
    3
    Симпатии:
    0
    дело в том, что там куча других ненужный ссылок.
    нужны именно те, что после цифры с точкой.
     
  4. simpson

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

    С нами с:
    11 фев 2006
    Сообщения:
    1.650
    Симпатии:
    0
    Адрес:
    Санкт-Петербург
    PHP:
    1. <?php
    2. $txt = <<<TXT
    3. 1.<span>dsfsdfsdf</span><a href='http://link1'>link</a>
    4. <a href='/asdasd'>adasdas</a>
    5. 2.<b>wrwerwer</b><a href="http://link2">link</a>
    6. <a class="sdfsd" href="/asdsd">sdfsfs</a>
    7. 3.<i>sfsdfsdf</i><a href=http://link3 class="url">link</a>
    8. TXT;
    9.  
    10. preg_match_all('~[0-9]+\..+?href=("|\'|)([^\s>]+)\\1~is', $txt, $out);
    11. print_r($out[2]);
    12. ?>
     
  5. mephy

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

    С нами с:
    21 мар 2007
    Сообщения:
    3
    Симпатии:
    0
    Работает!

    Спасиб большой =)
    Теперь осталось разобраться как оно работает =)
     
  6. newnoob

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

    С нами с:
    8 авг 2006
    Сообщения:
    151
    Симпатии:
    0
    Задача похожая поэтому топик создавать не буду.

    Вообщем в тексте к примеру текст в переменной $hometext приходят ссылки на сторонние сайты. Задача: подловить все линки и дописать в начале вместо просто href="site.com" - href="go.php?link=site.com".

    P.S. В переменной обычные новости, в них могут присутствовать и ссылки нуна сделать что бы они были не на прямую ):
     
  7. AlexGousev

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

    С нами с:
    25 мар 2006
    Сообщения:
    1.505
    Симпатии:
    0
    Адрес:
    Москва
    PHP:
    1. <?php
    2. preg_replace('%(<a[^>]+href\s*=\s*)(?:("[^"]*")|('[^']*'))%i', '$1"go.pgp?link=$2"', $hometext);
    3. ?>
    ЗЫ: Смайлы внутри php-кода — это круто… ;)
     
  8. newnoob

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

    С нами с:
    8 авг 2006
    Сообщения:
    151
    Симпатии:
    0
    Учитывая то что нужно смайл заменить нa : ( (Без пробела)

     
  9. AlexGousev

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

    С нами с:
    25 мар 2006
    Сообщения:
    1.505
    Симпатии:
    0
    Адрес:
    Москва
    Ага, одинарные кавычки забыл заслешить:
    PHP:
    1. <?php
    2. preg_replace('%(<a[^>]+href\s*=\s*)(?Sad"[^"]*")|(\'[^\']*\'))%i', '$1"go.pgp?link=$2"', $hometext);
    3. ?>
     
  10. newnoob

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

    С нами с:
    8 авг 2006
    Сообщения:
    151
    Симпатии:
    0
    Код (Text):
    1.  
    2. $hometext = '<a href="http://site.com">site</a> xexe';
    3.  
    4. $hometext = preg_replace('%(<a[^>]+href\s*=\s*)(?:("[^"]*")|(\'[^\']*\'))%i', '$1"go.php?link=$2"', $hometext);
    Ссылка получается: go.php?link= но не как нужно было: go.php?link=http://site.com

    Заранее огромное спасибо!
     
  11. AlexGousev

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

    С нами с:
    25 мар 2006
    Сообщения:
    1.505
    Симпатии:
    0
    Адрес:
    Москва
    Код (Text):
    1.  
    2. $hometext = '<a href="/main">Главная</a>
    3.             <a href=\'/contacts\'>Контакты</a>';
    4. echo preg_replace('%(<a[^>]+href\s*=\s*)(?:(?:"([^"]*)")|(?:\'([^\']*)\'))%i', '$1"go.php?link=$2$3"', $hometext);
     
  12. Sergey89

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

    С нами с:
    4 янв 2007
    Сообщения:
    4.796
    Симпатии:
    0
    Код (Text):
    1. [^>]
    Меня всегда смущало это выражение. А если
    Код (Text):
    1. <a onclick="javascript: (2 > 5)" href="link.html">
    ?
     
Статус темы:
Закрыта.