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

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

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

 

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

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

тема: Как вырезать тайтл (3-ч строчный) из страницы с помощью РВ ?..
 
 автор: haw0k   (23.09.2006 в 17:44)   письмо автору
 
 

Привет всем .. у меня проблема следующего характера :
Есть некоторый файл test.htm .. в нём тайтл хранится в следующем виде:

<title>
Батон
</title>

вот скрипт с РВ который ничего не находит:

<?php

$handle = fopen("test.htm","r");
while (!feof($handle)) {
$result = fgets($handle, 1024);
if (preg_match("/<title>[\n\r]*(.*)[\n\r]*<\/title>/i",$result,$arr)) break;
}
fclose($handle);
print_r ($arr);

?>

Но если сделать вот так: <title>Батон</title>
Сразу же находит ..

Помогите пожалуйста .. потому что я вошёл с состояние ступора (вроде элементарную вещь спрашиваю) от собственной беспомощности.

ЗЫ. Прошу прощения если такая тема уже была .. но порывшись в поиске я для себя ответа не нашёл ...

   
 
 автор: kasmanaft   (23.09.2006 в 18:15)   письмо автору
 
   для: haw0k   (23.09.2006 в 17:44)
 

Так происходит, потому что fgets() читает одну строку из файла, рег. выражение тут ни причем ... можно использовать fread()

   
 
 автор: haw0k   (23.09.2006 в 18:20)   письмо автору
 
   для: kasmanaft   (23.09.2006 в 18:15)
 

Спасибо Вам большое !

   
 
 автор: haw0k   (23.09.2006 в 22:49)   письмо автору
 
   для: haw0k   (23.09.2006 в 18:20)
 

хм ... а как всё таки лучше ? .. переписать РВ либо весь файл сделать одной большой строкой .. или всё таки предпочтительнее использовать fread() ? ..
Это я к чему .. просто в приведённом выше примере я убрал fgets() и использовал fread() по совету ув. Космонавта .. скрипт заработал .. т.е. извлёк из файла тайтл ..
Потом я решил извлечь из того же файла текст заключенный в тегах <div></div> используя ту же функцию fread() :


<?php
$handle 
fopen("test.htm","rb");
while (!
feof($handle)) {
    
$result fread ($handle,filesize("test.htm"));

if ( 
preg_match ("/<div class=\"text\">(.*?)<\/div>/si",$result,$arr) ) {
    for(
$i=0$i count($arr); $i++)    {
        echo 
"<br><br>".$arr[$i]."<br><br>";
        }
    }
}
fclose ($handle);
?>


И почему то на экране наблюдаю дублирование строк .. то есть например на выходе получаю :

Вася
Вася
Петя
Петя

Хотя должен был получить :

Вася
Петя

Вот такая вот проблемка :(

ЗЫ. И еще .. если я не собираюсь вносить в файл изменения то мне работать с функцией fopen() или file() .. логика подсказывает что нужно file() использовать .. но так ли это ?

   
 
 автор: kasmanaft   (23.09.2006 в 23:43)   письмо автору
 
   для: haw0k   (23.09.2006 в 22:49)
 

Если нужно собрать содержимое файла с одну строку, то наверное, лучше воспользоваться ф-й file_get_contents ...

что насчет дублирования ...

Вася 
Вася
Петя
Петя

получается при содержимом файла

<div class="text">Вася</div>
<div class="text">Петя</div>

? ? ?
если так, то должно бы быть просто вася-вася, без пети ... почему так происходит: в нулевой элемент массива $arr[0], попадает строка, подходящая под рег. выр-е ... то есть там не просто "Вася" будет, а "<div class="text">Вася</div>", далее, начиная с $arr[1] будет то, что попадает в скобки ("подмаски")
а для того, чтобы осуществить глобальный поиск (чтобы в РВ попал и "Петя"), нужно использовать ф-ю preg_match_all
В конечном счете получится что-то такое:

<?php
$result 
file_get_contents("test.htm");
if ( 
preg_match_all ('|<div class="text">(.*?)</div>|si',$result,$arr) ) {
    for(
$i=0$i count($arr[1]); $i++)    {
        echo 
"<br><br>".$arr[1][$i]."<br><br>";
        }
    }
?>

   
 
 автор: haw0k   (23.09.2006 в 23:52)   письмо автору
 
   для: kasmanaft   (23.09.2006 в 23:43)
 

>получается при содержимом файла

<div class="text">Вася</div>
<div class="text">Петя</div>

>? ? ?


Да .. образно структура именно такая ..

Спасибо большое за столь раскрытое обьяснение .. всегда знал что на softtime хорошие и понимающие люди ..

   
Rambler's Top100
вверх

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