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

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

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

 

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

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

тема: Найдите ошибку в рег. выражении, плз =)
 
 автор: yoyo   (06.07.2007 в 14:33)   письмо автору
 
 

html
<div class="best-site"><a href="http://www.site.ru/" target="_blank">это интересный сайт о...</a>

Выражение
$pattern = "/<div class=\"best-site\"><a[^>]+>(.*?)<\/a>/s";


Нужен текст из <a>текст</a>
Не могу понять где ошибка, не работает, возвращает пустой массив. Заранее спасибо.

   
 
 автор: webarray   (06.07.2007 в 14:39)   письмо автору
 
   для: yoyo   (06.07.2007 в 14:33)
 


<?
$text
="
<div class=\"best-site\"><a href=\"http://www.site.ru/\" target=\"_blank\">это интересный сайт о...</a> 
"
;
$pattern "/<div class=\"best-site\"><a[^>]+>(.*)<\/a>/s";
preg_match_all($pattern,$text,$regs); 
echo 
$regs[1][0];
?>

   
 
 автор: Faraon   (06.07.2007 в 14:42)   письмо автору
 
   для: yoyo   (06.07.2007 в 14:33)
 


$r='<div class="best-site"><a href="http://www.site.ru/" target="_blank">это интересный сайт о...</a>';
preg_match('#<div class="best-site"><a (.*)[>+](.*)</a>$#', $r, $regs);
print $regs[2];

   
 
 автор: kasmanaft   (06.07.2007 в 14:50)   письмо автору
 
   для: Faraon   (06.07.2007 в 14:42)
 

<a (.*) - с такой жадностью выражение не может работать правильно (не конкретно в этом случае, а вообще)
[>+] - это вообще что-то непонятное
(.*) - тут опять жадность...
</a>

   
 
 автор: Faraon   (06.07.2007 в 14:57)   письмо автору
 
   для: kasmanaft   (06.07.2007 в 14:50)
 

[>+] -это означает что должна быть хотя бы одна >
Можно было и просто написать >+ от этого независит
(.*) жадность тутнужна для того чтобывыбрать все символы которые встретятся в вырезаемом тексте, а не сидеть и прописывать их все
Где <a согласен можно было так не делать но писал на скорую руку, так как свободного времени мало

   
 
 автор: kasmanaft   (07.07.2007 в 10:29)   письмо автору
 
   для: Faraon   (06.07.2007 в 14:57)
 

> [>+] -это означает что должна быть хотя бы одна >
Это означает именно одна > или один плюс. Не больше, не меньше.

> Можно было и просто написать >+ от этого независит
Нужно было писать именно так, но только без плюса

> (.*) жадность тутнужна для того чтобывыбрать все символы которые встретятся в вырезаемом тексте, а не сидеть и прописывать их все
Нуну.. В том то и дело что все, а не те, что попадут внутрь тега. Попробуйте обработать этим рег. выражением два рядом стоящих <a> </a>

   
 
 автор: yoyo   (06.07.2007 в 14:58)   письмо автору
 
   для: kasmanaft   (06.07.2007 в 14:50)
 

Все норм заработало.. извиняюсь.. ошибка была в другом месте.. Просто давно с регулярными выражениями разбирался.. уже забыл что к чему.. думал может в чем ошибся..

И почему вы считаете, что конструкция (.*?) не должна работать? я вот честно забыл почему именно так.. но работает)

   
 
 автор: yoyo   (06.07.2007 в 15:21)   письмо автору
 
   для: yoyo   (06.07.2007 в 14:58)
 

Может кто подскажет чем отличается (.*?) от (.*)...
Просто помню, что мне нужен был именно первый случай.. не могу вспомнить почему именно так.

   
 
 автор: SHAman   (06.07.2007 в 15:58)   письмо автору
 
   для: yoyo   (06.07.2007 в 15:21)
 

(.*?) - это поиск минимального количества символов, а
(.*) - максимального. Скажем, пример:

слово "каракатица".
Если будем искать по /(.*)а/, то в $1 окажется "каракатиц", а если по /(.*?)/, то "к".

   
 
 автор: yoyo   (06.07.2007 в 16:37)   письмо автору
 
   для: SHAman   (06.07.2007 в 15:58)
 

Спасибо!

   
Rambler's Top100
вверх

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