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

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

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

 

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

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

тема: Регулярное выражение - помогите разобраться
 
 автор: doberman364   (28.11.2005 в 02:23)   письмо автору
 
 

Всем добрый день помогите разобратся в этом ужасе:
preg_match_all("/<[Aa][ \r\n\t]{1}[^>]*[Hh][Rr][Ee][Ff][^=]*=[ '\"\n\r\t]*([^ \"'>\r\n\t#]+)[^>]*>/",$buf,$url);

как образуется шаблон поиска и что обозначают все эти значки
С уваженеим Сергей1

   
 
 автор: DDK   (28.11.2005 в 07:32)   письмо автору
 
   для: doberman364   (28.11.2005 в 02:23)
 

Это называется регулярное выражение.

   
 
 автор: cheops   (28.11.2005 в 14:11)   письмо автору
 
   для: doberman364   (28.11.2005 в 02:23)
 

Это регулярное выражение ищет ссылки (<a href=http://...>) и извлекает адреса (http://...), однако не самым лучшим способом.

PS Регулярным выражениям у нас посвящён отдельный форум.

   
 
 автор: Евгений Петров   (28.11.2005 в 17:35)   письмо автору
 
   для: cheops   (28.11.2005 в 14:11)
 

однако не самым лучшим способом.
Я бы хуже не придумал... :)

   
 
 автор: doberman364   (28.11.2005 в 17:55)   письмо автору
 
   для: Евгений Петров   (28.11.2005 в 17:35)
 

будь добр подскажи как сделать по уму , да еще так чтобы можно была вставить переменную в каторой записан определенный адрес, короче чтобу искались все ссылки на одном сайте!!!
С уваженеим Сергей!

   
 
 автор: Евгений Петров   (28.11.2005 в 18:13)   письмо автору
 
   для: doberman364   (28.11.2005 в 17:55)
 

Если стоит задача вырезать все ссылки из текста, то можно сделать примерно так:
<?
  $str 
"Некоторый текст с сылками типа http://url.ru или www.com.ru ну или http://somehost.ru";
  if(
preg_match_all("/((http:\/\/)|(www.))([^ ]+)/i",$str,$regs))
  {
    echo 
"<pre>";
    foreach(
$regs[2] as $num => $value)
      echo 
$value.$regs[3][$num].$regs[4][$num]."\n";
  }
?>

   
 
 автор: doberman364   (28.11.2005 в 19:36)   письмо автору
 
   для: Евгений Петров   (28.11.2005 в 18:13)
 

данное вырожение ищет только сам текст http: а мне нодо чтобы отбиралась все ссылка целиком
С уваженеим Сергей!

   
 
 автор: Евгений Петров   (28.11.2005 в 19:43)   письмо автору
 
   для: doberman364   (28.11.2005 в 19:36)
 

Т.е. сылки?

   
 
 автор: doberman364   (28.11.2005 в 19:53)   письмо автору
 
   для: Евгений Петров   (28.11.2005 в 19:43)
 

на странице содержатся ссылки <a href="туда">название для туда</a> , так вот выражение
("/<[Aa][ \r\n\t]{1}[^>]*[Hh][Rr][Ee][Ff][^=]*=[ '\"\n\r\t]*([^ \"'>\r\n\t#]+)[^>]*>/")
отбирает их все , а мне надо модифицировать выражение чтобы отбирались все ссылки только на заданом сайте, т.е. (туда ) должно задоватся переменной причем на одном сайте все страници
http://www.softtime.ru/forum/answer.php?id_forum=6&id_theme=9845&id_post=57345-ПОДХОДИТ
http://www.softtime.ru/forum/пропропаоапоапоапо-ПОДХОДИТ
http://www.softtime.ru/прапрвапрварарва-ПОДХОДИТ
http://www.pekc.net - НЕ ПОДХОДИТ

С УВАЖЕНЕИМ СЕРГЕЙ

   
 
 автор: cheops   (28.11.2005 в 20:22)   письмо автору
 
   для: doberman364   (28.11.2005 в 19:53)
 

Лучше отталкиваться от модифицированного регулярного выражения, так выражение
"|/<a[^>]*href[^=]*=['\"\s]*([^\"'>]+)['\"\s]*[^>]*>|is"

эквивалентно вышеприведённому, для подстановки домена можно использовать следующее выражение
"|/<a[^>]*href[^=]*=['\"\s]*(http://www\.softtime\.ru[^\"'>]+)['\"\s]*[^>]*>|is"

   
 
 автор: doberman364   (28.11.2005 в 21:13)   письмо автору
 
   для: cheops   (28.11.2005 в 20:22)
 

не работает не первый вариант не второй , сопадений ноль а у примера который я даю
на dska.ru
http://www.dska.ru/arm.htm http://www.dska.ru/insh.htm http://www.dska.ru/dok.htm http://www.dska.ru/dop.htm http://www.dska.ru/mos.htm http://www.dska.ru/rus.htm http://www.dska.ru/str.htm http://dska.ru/delit.php http://www.modul.ru http://www.ddgroup.ru/ http://villa.dska.ru http://dska.ru/rest http://dska.ru/rest.htm http://dska.ru/designer.htm http://dska.ru/anscot.htm http://bars-x.ru http://aqua-m.ru http://dska.ru/germabutil.htm http://dska.ru/as.htm http://dska.ru/dom.htm http://dska.ru/mag.htm http://dska.ru/nov.htm http://dska.ru/inv.htm http://dska.ru/stroi.htm http://www.centre-a-stroy.ru/ http://www.nor-dom.ru http://click.hotlog.ru/?168993 http://click.hotlog.ru/?168993 http:// http://u5431.39.spylog.com/cnt?cid=543139&f=3&p=0 http://top.mail.ru/jump?from=667220 http://top.mail.ru/jump?from=667220 http://www.domovoi.ru/?host=173 http://www.kvartirant.ru http://top.doski.ru/?id=940 http://www.directrix.ru/?sid=39434

   
 
 автор: doberman364   (28.11.2005 в 21:20)   письмо автору
 
   для: doberman364   (28.11.2005 в 21:13)
 

впрочем "|/<a[^>]*href[^=]*=|is" результат тоже нулевой
С уважением Сергей

   
 
 автор: doberman364   (28.11.2005 в 21:32)   письмо автору
 
   для: doberman364   (28.11.2005 в 21:20)
 

что обозначает [ '\"\n\r\t]*([^ \"'>\r\n\t#]
С уваженеим Сергей

   
 
 автор: cheops   (29.11.2005 в 00:37)   письмо автору
 
   для: doberman364   (28.11.2005 в 21:32)
 

[ '\"\n\r\t] - один символ: либо пробел, либо перевод строки, либо возврат каретки, либо табуляция, либо одинарная кавычка, либо двойная кавычка;

[ '\"\n\r\t]* - любое число указанных символов, в том числе и 0

[^ \"'>\r\n\t#] - любой символ кроме пробела, двойной или одинарной кавычки, возврата каретки, перевода строки, символа табуляции и диеза #. Символ строго один, так как нет модификатора *, +, ?.

   
 
 автор: cheops   (29.11.2005 в 00:33)   письмо автору
 
   для: doberman364   (28.11.2005 в 21:13)
 

Стоп. Давайте озвучим задачу. Осущетсвляется поиск в тексте приведённом выше http:// или всё-таки ссылок вида <a href=... >. Поэтому лучше сразу отталкиваться от образца - приведённый выше текст являтеся образцом? Если нет, то где образец - дайте точную ссылку, если не сложно.

   
 
 автор: doberman364   (29.11.2005 в 14:40)   письмо автору
 
   для: cheops   (29.11.2005 в 00:33)
 

Общей задачей скрипта является составление карты сайта , т.е скрипт ищет все ссылки на первой странице переходит по первой из них ищет там все сылки и т.д. только он пытается составить карту всего интернета , а мне надо что бы он не выходил за пределы указанного сайта.
Исходное выражение вот
preg_match_all("/<[Aa][ \r\n\t]{1}[^>]*[Hh][Rr][Ee][Ff][^=]*=[ '\"\n\r\t]*([^ \"'>\r\n\t#]+)[^>]*>/",$buf,$url);
С уваженеим Сергей !

   
 
 автор: doberman364   (29.11.2005 в 17:37)   письмо автору
 
   для: doberman364   (29.11.2005 в 14:40)
 

выражение
preg_match_all("/<[Aa][ \r\n\t]{1}[^>]*[Hh][Rr][Ee][Ff][^=]*=[ '\"\n\r\t]*([^ \"'>\r\n\t#]*)dska[^>]*>/",$buf,$url);
отбирает нужное но выводит строки почемуто не целиком вот так
http://www. http://www. http://www. http://www. http://www. http://www. http://www. http:// http://villa. http:// http:// http:// http:// http:// http:// http:// http:// http:// http:// http://
С уважением Сергей!

   
 
 автор: cheops   (29.11.2005 в 21:53)   письмо автору
 
   для: doberman364   (29.11.2005 в 17:37)
 

Необходимо исправить выражение следующим образом
<?php
preg_match_all
("/<[Aa][ \r\n\t]{1}[^>]*[Hh][Rr][Ee][Ff][^=]*=[ '\"\n\r\t]*([^ \"'>\r\n\t#]*dska[^>]*)>/",$buf,$url);
?>

   
 
 автор: doberman364   (30.11.2005 в 17:31)   письмо автору
 
   для: cheops   (29.11.2005 в 21:53)
 

мы близки к победе строки отбираются нужные , только вывод немного больше чем нужно
http://www.dska.ru/arm.htm" http://www.dska.ru/insh.htm" http://www.dska.ru/dok.htm" TARGET=" blank" http://www.dska.ru/dop.htm" TARGET=" blank" http://www.dska.ru/mos.htm" class="main-menu" http://www.dska.ru/rus.htm" class="main-menu" http://www.dska.ru/str.htm" class="main-menu" http://dska.ru/delit.php" class="main-menu" http://villa.dska.ru" target="W12" class="main-menu" http://dska.ru/rest" target="W17" class="main-menu" http://dska.ru/rest.htm" target="W11" class="main-menu" http://dska.ru/designer.htm" target="W6" class="main-menu" http://dska.ru/anscot.htm" target="W16" class="main-menu" http://dska.ru/germabutil.htm" target="W11" class="main-menu" http://dska.ru/as.htm" target="W5" class="main-menu" http://dska.ru/dom.htm" target="W9" class="main-menu" http://dska.ru/mag.htm" target="W14" class="main-menu" http://dska.ru/nov.htm" target="W15" class="main-menu" http://dska.ru/inv.htm" target="W16" class="main-menu" http://dska.ru/stroi.htm" target="W15" class="main-menu

НУ ДОВАЙ ДОЖМЕМ!!!!!!!!!
С уваженеим Сергей!

   
 
 автор: cheops   (01.12.2005 в 00:45)   письмо автору
 
   для: doberman364   (30.11.2005 в 17:31)
 

Можно усовершенствовать регулярное выражение следующим образом
<?php 
preg_match_all
("/<[Aa][ \r\n\t]{1}[^>]*[Hh][Rr][Ee][Ff][^=]*=[ '\"\n\r\t]*([^ \"'>\r\n\t#]*dska[^ \"'>]*)[\"']*>/",$buf,$url); 
?>

   
 
 автор: doberman364   (03.12.2005 в 13:38)   письмо автору
 
   для: cheops   (01.12.2005 в 00:45)
 

Огромное спасибо но мое выражение работает лучше !
preg_match_all("/<[Aa][ \r\n\t]{1}[^>]*[Hh][Rr][Ee][Ff][^=]*=[ '\"\n\r\t]*([^ \"'>\r\n\t#]*dska[^\"]*)[$\"]/",$buf,$url);

С уважением Сергей!!!

   
Rambler's Top100
вверх

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