Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В. Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В. PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум Регулярные Выражения

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Проверка ссылки на удалённом сайте
 
 автор: 2005   (26.06.2006 в 22:08)   письмо автору
 
 

Или я перетрудился или я ничего не понимаю...
проверяю регулярным выражением наличие ссылок на свои сайты на страницах.
выражение такое (кривое конечно - но работает):

<?
$text
=file_get_contents($page); // содержимое проверяемой страницы
$site ereg_replace("(http:\/\/)?(www\.)?([\/$]*)?"""$site); // проверяемый сайт (без http b www
$pattern "/<a[[:space:]]+([^>]*[[:space:]]+)*href=([\'|\"])?(http:\/\/+(www\.)?)($site)([\/])?([\'|\"])?([[:space:]]*|[[:space:]][^>]*)>(.*)<\/a>/isU";
  if(
preg_match($pattern,$text,$regs)) 
     {   
//        [2] и [7] - соответствие кавычек [1] - число кавычек должно быть четным
     
if ((!($regs[2]!=$regs[7]))&&(substr_count($regs[1],"\"")%2==0))  return($regs[0]);
     }
?>


и вот накыкаюсь на страницу, на которой свои ссылки вижу...
вот ее адрес: http://sportbet.nm.ru/links21.html
но которые не находятся этим выражением...
... причем не только мои, но и вообще никакие не находятся...
... причем копирую с этой страницы код с моими ссылками, вставляю на какужю-нибудь свою страницу - ВСЕ РАБОТАЕТ!

ничего не понимаю - умучился. ПРОШУ ПОМОЩИ!!!

   
 
 автор: cheops   (27.06.2006 в 01:40)   письмо автору
 
   для: 2005   (26.06.2006 в 22:08)
 

Хм... вы же заранее знаете имя своего сайта, ищите просто вхождение подстроки "sportbet.nm.ru" без регулярных выражений - получится и быстрее и прозрачнее...

   
 
 автор: 2005   (27.06.2006 в 10:11)   письмо автору
 
   для: cheops   (27.06.2006 в 01:40)
 

Добрый день.
Согласен, но это не решает моей проблемы.

Я не ставлю перед собой задачу обмена ссылками и проверки их наличия - я ставлю задачу изучения PHP (а скрипт по проверке - лишь инструмент обучения). В противном случае я бы не искал ответа на вопросы на форуме, а просто "дернул" бы откуда-нибудь готовое решение.
-----------

А проблемма остается в следущем: вот 2 страницы:
1) http://sportbet.nm.ru/links21.html - не моя (на ней прописаны мои ссылки - в частности на сайт www.lamistroy.ru)
2) http://www.3bohok-tobap.ru/cheops.html - (эту я специально сам создал, скопировав в нее часть кода из страницы №1)

на обеих присутствуем код моей многолинковой ссылки. (он совершенно зеркален или кажется таковым) причем на 2-ой странице скопирован из 1-й только небольшой кусок htm-кода без скриптов и т.д., но в котором есть мои ссылки + несколько строк "до" и "после" них.

так вот - на странице №2 моя ссылка находится ниже приведенной функцией, а на стр №1 - она не ищется... кто-нибудь может ответить на вопрос ПОЧЕМУ???
Я предполагаю, что на стр №1 установлена какая-то защита, не позволяющая корректно работать регулярному выражению... но разве это возможно??? (ведь file_get_contents() на сколько я понимаю просто создает текстовую пересенную, которая никак не может изменяться при наличие в ней текста скрипта.

Вобщем помогите пожалуйста разобраться!

<?
$site
="www.lamistroy.ru";          // сайт, ссылку на который я ищу (или любой другой с этих страниц)
print(Поиск("http://www.3bohok-tobap.ru/cheops.html",$site));   // Ссылка найдена
print(Поиск("http://sportbet.nm.ru/links21.html",$site));       // Ссылка НЕ НАЙДЕНА
?>

Функция поиска ссылки на $site на странице $page:

<?
function Поиск($page,$site)
{
$my_site ereg_replace("(http:\/\/)?(www\.)?([\/$]*)?"""$site);    // 
$contents file_get_contents($page);
$pattern "/<a[[:space:]]+([^>]*[[:space:]]+)*href=([\'|\"])?(http:\/\/+(www\.)?)($my_site)([\/])?([\'|\"])?([[:space:]]*|[[:space:]][^>]*)>(.*)<\/a>/isU";

  if(
preg_match($pattern,$contents,$regs))
  {  foreach(
$regs as $ind=>$val) print("$ind$val<br>");    // просто проверка regs-ов
     
if ((!($regs[2]!=$regs[7]))&&(substr_count($regs[1],"\"")%2==0)) // проверка "кавычек"
     
return("Найдено: ".$regs[0]);
  }
  else
     return(
"Ссылка не найдена.");
}

/*
p.s. Вариант защита на функции PHP - тоже мне не понятен... если упростить регэксп (например убрать проверку [[:space:]], или вообще сократить до минимума:

$pattern ="/lamistroy.ru/";
то соответствие находится...
*/
?>

   
 
 автор: cheops   (27.06.2006 в 11:39)   письмо автору
 
   для: 2005   (27.06.2006 в 10:11)
 

В регулярных выражениях (да и вообще в программировании), чем проще код, тем лучше (в нём будет меньше ошибок и фич, которые не позволят коду работать в самый ответственный момент). Попробуйте вот такой скрипт
<?php
function search($page,$site

  
$contents file_get_contents($page); 
  
$pattern "/<a[\s]+[^>]*href=[^>]*".preg_quote($site)."[^>]*>([^<]+)<\/a>/isU"

  if(
preg_match($pattern$contents$regs)) 
  {
     return(
"Найдено: ".$regs[0]); 
  } 
  else 
     return(
"Ссылка не найдена."); 


echo 
search("http://sportbet.nm.ru/links21.html","www.lamistroy.ru");
?>

   
 
 автор: 2005   (27.06.2006 в 14:36)   письмо автору
 
   для: cheops   (27.06.2006 в 11:39)
 

Спасибо...
Теперь на этой конкретно странице все наконец находится!
Но отсюда возникают 2 вопроса:

1) Код изящьный НО -теперь эта конструкция ищет почти все... вот например:

<a href='http://www.lamistroy.ru> '>Текст</a>
<a class=ahref='http://www.lamistroy.ru'>Текст</a>
<a href='http://www.lamistroy.ru/zero.html'>Текст</a>
<a href='http://www.lamistroy.ru_ЛЯЛЯ'>Текст</a>

- > фактически ссылки не являются "рабочими" (т.е. Робот-поисковик наткнувшись на них не проиндексирует мои страницы), однако скрипт по данному рег. выражению их найдет...

А вот ссылка: <a href='http://www.lamistroy.ru'>Текст<Еще_текст</a>
Найдена не будет (хотя она рабочая и проиндексируется)

2) И все-таки... почему первоначальный шаблон не работал на одной, а работал на другой странице (текст-то там был одинаковый) - рег. выражение тоже... в чем подвох???

   
 
 автор: 2005   (27.06.2006 в 19:10)   письмо автору
 
   для: 2005   (27.06.2006 в 14:36)
 

почему-то данная тема показывается, как "отвеченная" - (пишу, чтобы привлечь внимание) :-)

   
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования