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

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

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

 

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

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

тема: Парсинг HTML
 
 автор: saveliy   (11.12.2008 в 22:58)   письмо автору
 
 

здравствуйте мне нужно пропарсить HTML и вытащить из него названия песен. Я вроде все сделал, работает)) но так как это делал первый раз... хотелось бы спросить у специалистов, чтобы доавить в код, чтобы он был грамотным)))

что нужно пропарсить:

      <font color="#FF0000"><b>Текущий файл</b></font>
      <table border="0" cellpadding="0" cellspacing="1" bgcolor="#000000" width="60%">
        <tr>
          <td width="30%" bgcolor="#C0C0C0" align="center"><b>Позиция</b></td>
          <td width="70%" bgcolor="#FFFFFF">&nbsp;4&nbsp;</td>
        </tr>
        <tr>
          <td width="30%" bgcolor="#C0C0C0" align="center"><b>Название файла</b></td>
          <td width="70%" bgcolor="#FFFFFF">&nbsp;Rephrase - The Return of Jimi Fingers&nbsp;</td>
        </tr>


а вот как я его пропарсил:

$pattern = "|Текущий(.*?)Название файла(.*?)<td(.*?)>(.*?)</td>|si";


и еще вопросик, я вставлял конструкцию (*?) почему по одному нельзя?

  Ответить  
 
 автор: xx77   (12.12.2008 в 02:11)   письмо автору
 
   для: saveliy   (11.12.2008 в 22:58)
 

> по одному

если нужно только название , то нет смысла захватывать в () то что не имеет значение
можно просто убрать лишние скобки,
или сделать (?: .....) такие подмаски
, и можно постараться меньше захватывать
например начиная с "Название файла" или с "<b>Название " (с такого символа, который реже встречается , или хотя-бы с нескольких таких символов)
$pattern = '|Название файла(?:<[^>]+>\s*)+([^<]+)</td>|';

и думаю всегда, когда возможно, лучше чаще применять жадные квантификаторы например + , вместо +?
, хотя как не-специалист не очень в этом уверен ,) можно просто сравнивать иногда что быстрее, но на это нужно время.

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

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