как спарсить

Статус
В этой теме нельзя размещать новые ответы.

ivashka

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

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

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

надо ещё игнорировать капс посредвом 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);


третья строчка даст ссылки без кавычек
 
это даст только ссылки в одинарных кавычках
нет, кавычки вне скобак
Код:
    [1] => Array
        (
            [0] => /faq.php?
            [1] => sendmessage.php
            [2] => /
            [3] => /
            [4] => /showthread.php?t=36569
            [5] =>

зачем экранировать < > ?
патаму что это зарезервированные символы ;)

из шпаргалки по регуляркам:
screen002vq5.jpg


надо ещё игнорировать капс посредвом i
вот это да, забыл :)
 
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
А сложно вместо очищения поставить [':"] ?
 
Что-то вы меня совсем запутали. Так какой же выход последний? Что нужно писать?
 
Код:
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);

этим чистишь ссылки.

А сложно вместо очищения поставить [':"] ?

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