1. Задавайте здесь вопросы о коде, которые не подходят в другие разделы, такие как:
    Дизайн > Верстка
    PHP > Как сделать на PHP
    Скрыть объявление

как спарсить

Тема в разделе "Web Coding", создана пользователем ivashka, 15 фев 2008.

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

    ivashka

    Регистр.:
    16 май 2007
    Сообщения:
    151
    Симпатии:
    15
    Я только немного ознакомился с регулярными выражениями, поэтому нуждаюсь в вашей помощи.

    Как написать парсер который бы получал все ссылки из данной страници? Желательно только внутренние.
     
  2. andead

    andead Создатель

    Регистр.:
    11 ноя 2007
    Сообщения:
    30
    Симпатии:
    11
    $matches[1] - ссылки
    $matches[2] - текст ссылки
     
    ivashka и Dum нравится это.
  3. n42

    n42

    Регистр.:
    8 фев 2008
    Сообщения:
    206
    Симпатии:
    25
    это даст только ссылки в одинарных кавычках

    зачем экранировать < > ?

    надо ещё игнорировать капс посредвом i

    Код:
    preg_match_all('/\<a.+?href="(.*?)".*?\>(.+?)\<\/a\>/i', $html, $matches);
    preg_match_all('/\<a.+?href=\'(.*?)\'.*?\>(.+?)\<\/a\>/i', $html, $matches);
    preg_match_all('/\<a.+?href=([^\s>]*?).*?\>(.+?)\<\/a\>/i', $html, $matches);
    
    

    третья строчка даст ссылки без кавычек
     
  4. andead

    andead Создатель

    Регистр.:
    11 ноя 2007
    Сообщения:
    30
    Симпатии:
    11
    нет, кавычки вне скобак
    Код:
        [1] => Array
            (
                [0] => /faq.php?
                [1] => sendmessage.php
                [2] => /
                [3] => /
                [4] => /showthread.php?t=36569
                [5] => 
    
    патаму что это зарезервированные символы ;)

    из шпаргалки по регуляркам:
    [​IMG]

    вот это да, забыл :)
     
  5. n42

    n42

    Регистр.:
    8 фев 2008
    Сообщения:
    206
    Симпатии:
    25
    href=" - найдёт только ссылки где аттрибуты в двойных кавычках.

    <a href="page.html"> - твой код надёт только такую строчку.
    <a href='page.html'>
    <a href=page.html> моя третья найдёт эту и две предыдущие. но ссылка будет в кавычках, если они есть.

    Поэтому проще взять третью очищать кавычки.
    Код:
    if($s[0] == '"') $s = substr($s, 1, -1);
    if($s[0] == "'") $s = substr($s, 1, -1);
    if($s[strlen($s) -1] == '"') $s = substr($s, 0, -2);
    if($s[strlen($s) -1] == "'") $s = substr($s, 0, -2);
    
     
  6. Sect0R

    Sect0R Читатель

    Заблокирован
    Регистр.:
    4 апр 2007
    Сообщения:
    136
    Симпатии:
    43
    А сложно вместо очищения поставить [':"] ?
     
  7. ivashka

    ivashka

    Регистр.:
    16 май 2007
    Сообщения:
    151
    Симпатии:
    15
    Что-то вы меня совсем запутали. Так какой же выход последний? Что нужно писать?
     
  8. n42

    n42

    Регистр.:
    8 фев 2008
    Сообщения:
    206
    Симпатии:
    25
    Код:
    preg_match_all('/\<a.+?href=([^\s>]*?).*?\>(.+?)\<\/a\>/i', $html, $matches);
    этим ищешь

    Код:
    if($s[0] == '"') $s = substr($s, 1, -1);
    if($s[0] == "'") $s = substr($s, 1, -1);
    if($s[strlen($s) -1] == '"') $s = substr($s, 0, -2);
    if($s[strlen($s) -1] == "'") $s = substr($s, 0, -2);
    этим чистишь ссылки.

    это не обосновано усложнит. когда много вопросов неясно как оно будет понято. напиши выражение если ты считаешь что это проше или быстрей.
    Но регулярные сложные выражениямогут быть очень рекурентны и медлены.
     
    ivashka нравится это.
  9. ivashka

    ivashka

    Регистр.:
    16 май 2007
    Сообщения:
    151
    Симпатии:
    15
    А как мне теперь различить внутренние ссылки от внешних?
    Нужно что бы 2 масива было, в одном внутренние в другом внешние, но это сам напишу, подскажите как их различить на пхп. Заранее благодарен.
     
  10. n42

    n42

    Регистр.:
    8 фев 2008
    Сообщения:
    206
    Симпатии:
    25
    вот так вот

     
    ivashka нравится это.
Статус темы:
Закрыта.