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

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

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

 

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

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

тема: Выбрать текст из HTML-кода
 
 автор: lusher   (22.11.2007 в 12:04)   письмо автору
 
 

Добрый день!

Имеется строка
<li><span>Сценарий:</span> <a href="http://">Имя сценариста</a><br><span>Продюсер:</span> <a href="http://">Имя продюсера</a>, <a href="http://">Имя второго продюсера</a><br><span>Оператор:</span> <a href="http://">Имя оператора</a><br>

Требуется выдрать из текста только "Имя сценариста". Единственное до чего дошел - это такой шаблон
$pattern = '/<span>Сценарий:.*<a.*>(.*)<\/a><br>/';
Функция сейчас возвращает почему-то "Имя оператора.

Помогите пожалуйста получить требуемый результат - голову уже сломал :-(

Заранее благодарен!!!

   
 
 автор: Faraon   (22.11.2007 в 12:11)   письмо автору
 
   для: lusher   (22.11.2007 в 12:04)
 

Как то так
<pre>
<?php
$text
='<li><span>Сценарий:</span> <a href="http://">Имя сценариста</a><br><span>Продюсер:</span> <a href="http://">Имя продюсера</a>, <a href="http://">Имя второго продюсера</a><br><span>Оператор:</span> <a href="http://">Имя оператора</a><br>';
preg_match_all("|Сценарий:</span>[^>]+>(.+?)</a>|is"$text$out);
print_r ($out);
?>

   
 
 автор: lusher   (22.11.2007 в 12:36)   письмо автору
 
   для: Faraon   (22.11.2007 в 12:11)
 

К сожалению не помогло
Текст ошибки
Parse error: syntax error, unexpected T_IF in Z:\home\parser\www\getDescriptions.php on line 48

Первый раз вижу столь информативное сообщение :-)) Куда следует копать дальше?

PS Может быть Вы знаете, где можно найти хорошее описание регулярных выражений и работы с ними на пхп?

   
 
 автор: Faraon   (22.11.2007 в 12:55)   письмо автору
 
   для: lusher   (22.11.2007 в 12:36)
 

>Может быть Вы знаете, где можно найти хорошее описание регулярных выражений и работы с ними на пхп?
Если в инете то для начала можно посмотреть на этом форуме
http://www.softtime.ru/bookphp/gl7_1.php

Насчет ошибки это она у вас где то в скрипте на 48 строке
Если можете прикрепите файл, посмотрим в чем ошибки

>Первый раз вижу столь информативное сообщение :-)) Куда следует копать дальше?
Не очень понятен вопрос

   
 
 автор: lusher   (22.11.2007 в 13:11)   письмо автору
 
   для: Faraon   (22.11.2007 в 12:55)
 

Выложить весь код не представляется возможным. А вот кусочек на который идет ругань легко

        $pattern = "|Сценарий:</span>[^>]+>(.+?)</a>|is"
        if(preg_match_all($pattern , $line, $matches)) //48 строка. Вот тут и возникает ошибочка.
        {
            echo('Сценарий: '. $matches[1] . '<br>');
        }


PS Спасибо за урлик. Почитаем

   
 
 автор: Faraon   (22.11.2007 в 13:17)   письмо автору
 
   для: lusher   (22.11.2007 в 13:11)
 

После

$pattern = "|Сценарий:</span>[^>]+>(.+?)</a>|is"   

точку с запятой поставьте ;

PS внимательнее надо быть :)

   
 
 автор: lusher   (22.11.2007 в 15:19)   письмо автору
 
   для: Faraon   (22.11.2007 в 13:17)
 

Спасибо огроменное!!! Помогло.

Только возник такой моментик:
Например в строке у меня может быть несколько продюсеров. А вытаскивает только одного. Можно получить всех продюсеров?

<li><span>Сценарий:</span> <a href="http://">Имя сценариста</a><br><span>Продюсер:</span> <a href="http://">Имя продюсера</a>, <a href="http://">Имя второго продюсера</a><br><span>Оператор:</span> <a href="http://">Имя оператора</a><br>

   
 
 автор: Faraon   (22.11.2007 в 15:23)   письмо автору
 
   для: lusher   (22.11.2007 в 15:19)
 

После preg_match_all поставьте цикл

for($i=0;$i<count($matches[1]);$i++){
        echo 'Сценарий: '. $matches[1][$i] . '<br>'; 
        }

или
foreach ($matches[1] as $val){   
     echo 'Сценарий: '. $val. '<br>'; 
}

   
 
 автор: lusher   (23.11.2007 в 00:18)   письмо автору
 
   для: Faraon   (22.11.2007 в 15:23)
 

Не получается. Возвращает только текст из последней ссылки :-(

   
 
 автор: Faraon   (23.11.2007 в 08:47)   письмо автору
 
   для: lusher   (23.11.2007 в 00:18)
 

Приведите этот кусок кода как вы делаете

   
 
 автор: lusher   (23.11.2007 в 12:05)   письмо автору
 
   для: Faraon   (23.11.2007 в 08:47)
 


        $pattern = "|Сценарий:</span>[^>]+>(.+?)</a>|is";
        if(preg_match_all($pattern , $line, $matches))
        {
            //echo('Сценарий: '. $matches[1][0] . '<br>');
            //print_r($matches);
            foreach ($matches[1] as $val)
            {
                 echo 'Сценарий: '. $val . '<br>';
            }
        }

   
 
 автор: Faraon   (23.11.2007 в 12:53)   письмо автору
 
   для: lusher   (23.11.2007 в 12:05)
 

Так подождите! Вам нужен был сценарист!
А теперь вы говорите насчет прдюсеров
Поконкретнее скажите что вам нужно вытащить?

   
 
 автор: lusher   (23.11.2007 в 13:02)   письмо автору
 
   для: Faraon   (23.11.2007 в 12:53)
 

Цель в том, чтобы выбрать все имена всех "специалистов", которые работали над созданием фильма.
В данном примере - это сценаристы. Проблема в том, что сценаристов может быть несколько.
Не важно кого вытаскивать сценаристов или продюсеров - все они выводятся одинаково.
Если допилить код, чтобы он вытаскивал всех сценаристов, то для остальных "специалистов" код я смогу поправить. Надеюсь :-)

   
 
 автор: Faraon   (23.11.2007 в 13:39)   письмо автору
 
   для: lusher   (23.11.2007 в 13:02)
 

Тогда поступим так

<?
$line
='<li><span>Сценарий:</span><a href="http://">Имя сценариста 0</a><br><span>Продюсер:</span> <a href="http://">Имя продюсера</a>, <a href="http://">Имя второго продюсера</a><br><span>Оператор:</span> <a href="http://">Имя оператора</a><br>';
$pattern "#Продюсер:</span>[^>]+>(.+?)<br>#is";
        if(
preg_match_all($pattern $line$matches))
        {
          foreach (
$matches[1] as $val)
            {
                 echo 
'Продюсер: 'strip_tags($val) . '<br>';
            }
        }
?>


Или так для выбора сразу всех участников
<?
$line
='<li><span>Сценарий:</span><a href="http://">Имя сценариста 0</a><br><span>Продюсер:</span> <a href="http://">Имя продюсера</a>, <a href="http://">Имя второго продюсера</a><br><span>Оператор:</span> <a href="http://">Имя оператора</a><br>';
$pattern "#<span>(.+?)</span>[^>]+>(.+?)<br>#is";
        if(
preg_match_all($pattern $line$matches))
        {
          for(
$i=0;$i<count($matches[1]);$i++){
        echo 
$matches[1][$i] .' '.strip_tags($matches[2][$i]). '<br>';
        }

        }
?>

   
 
 автор: lusher   (23.11.2007 в 18:25)   письмо автору
 
   для: Faraon   (23.11.2007 в 13:39)
 

Faraon, большое спасибо за Вашу помощь! Вы мне очень помогли!!!
В конечном итоге я взял Ваш предпоследний вариант и чуть допилил. Все работает как хорошие часы :-))

PS Может быть посоветуете хорошую ссылку или книгу по регулрным выражениям?
В той ссылке, что мне дали нет тех "фишек", которые Вы использовали при написании паттернов.


Еще раз спасибо!!

   
 
 автор: Trianon   (23.11.2007 в 21:55)   письмо автору
 
   для: lusher   (23.11.2007 в 18:25)
 

Есть лишь одна исчерпывающая книга. Дж.Фридл.

   
 
 автор: Faraon   (24.11.2007 в 01:53)   письмо автору
 
   для: lusher   (23.11.2007 в 18:25)
 

Trianon уже сказал, чуть выше

   
 
 автор: lusher   (24.11.2007 в 21:58)   письмо автору
 
   для: lusher   (23.11.2007 в 18:25)
 

Всем спасибо!
Читаем-с :-)

   
Rambler's Top100
вверх

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