|
|
|
| Или я перетрудился или я ничего не понимаю...
проверяю регулярным выражением наличие ссылок на свои сайты на страницах.
выражение такое (кривое конечно - но работает):
<?
$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
но которые не находятся этим выражением...
... причем не только мои, но и вообще никакие не находятся...
... причем копирую с этой страницы код с моими ссылками, вставляю на какужю-нибудь свою страницу - ВСЕ РАБОТАЕТ!
ничего не понимаю - умучился. ПРОШУ ПОМОЩИ!!! | |
|
|
|
|
|
|
|
для: 2005
(26.06.2006 в 22:08)
| | Хм... вы же заранее знаете имя своего сайта, ищите просто вхождение подстроки "sportbet.nm.ru" без регулярных выражений - получится и быстрее и прозрачнее... | |
|
|
|
|
|
|
|
для: 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/";
то соответствие находится...
*/
?>
|
| |
|
|
|
|
|
|
|
для: 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");
?>
|
| |
|
|
|
|
|
|
|
для: 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 в 14:36)
| | почему-то данная тема показывается, как "отвеченная" - (пишу, чтобы привлечь внимание) :-) | |
|
|
|