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

Форум PHP

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

 

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

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

тема: парсинг строки, задание из учебника
 
 автор: ДобрыйУхх   (22.01.2010 в 20:22)   письмо автору
 
 

Привет всем

В книге М. Кузнецова php5 есть такое задание

4.3. Создайте функцию, которая, принимая строку с HTML-страницей, воз-
вращала бы ее название, заключенное между тегами <title> и </title>.

Пользоваться можно лишь строковыми функциями и д.р., но нельзя регулярками


// Скачиваем страничку с встроку
$path = 'http://www.softtime.ru';
$str = '';
if  (($str = file_get_contents($path)) === FALSE)  die("Ошибка открытия Файла");

//Первое вхождение строки
$pFirstPos = strpos($str, "<title>");
//Последнее вхождение строки
$pLastPos = strpos($str, "</title>");


if (($pFirstPos !== FALSE)&&($pLastPos !== FALSE))
{
    echo substr($str, $pFirstPos+7, $pLastPos-$pFirstPos-7);
}
 



А как можно сделать:
1. регистронезависимый поиск в строке для парсинга $str, например не "<title>", а "<TItLe>",
2. можно ли переписать эту строку if (($str = file_get_contents($path)) === FALSE) echo die("Ошибка открытия Файла");, чтобы выходило лишь мое диагностическое сообщение "Ошибка открытия Файла", а не стандартное из функции file_get_contents
3. Оптимально ли написан код, можно ли использовать другие функции, алгоритмы, приемы?

  Ответить  
 
 автор: neadekvat   (22.01.2010 в 20:35)   письмо автору
 
   для: ДобрыйУхх   (22.01.2010 в 20:22)
 

1. stripos();
2. Не совсем понял. У вас же и так на экран выводится то, что вы в die() напишите.
3. В комментариях неверные слова. Последнее вхождение ищет strripos(), но это явно не то, что нужно вам.
//Первое вхождение строки 
$pFirstPos = strpos($str, "<title>"); 
//Последнее вхождение строки 
$pLastPos = strpos($str, "</title>");


В остальном - переходите к регуляркам, я думаю.

  Ответить  
 
 автор: ДобрыйУхх   (22.01.2010 в 20:51)   письмо автору
 
   для: neadekvat   (22.01.2010 в 20:35)
 

Спасибо, neadekvat , Вы в очередной раз мне помогаете))


2. Сначала в условии вычисляется file_get_contents($path)), а лишь затем die. Получается если $path синтаксически неверен, то функция file_get_contents первой выводит сообщение об ошибке, а die потом. Так вот а нельзя ли чтобы сначала die, а потом вторая.. Или как то по другому это все реализовать

А регулярки в следующей главе))

  Ответить  
 
 автор: neadekvat   (22.01.2010 в 21:42)   письмо автору
 
   для: ДобрыйУхх   (22.01.2010 в 20:51)
 

...$str = @file_get_contents($path))...

  Ответить  
Rambler's Top100
вверх

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