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

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

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

 

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

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

тема: Помогите вырезать текст из ХТМЛ
 
 автор: vladimir_sumy   (24.10.2007 в 15:53)   письмо автору
 
 

День добрый!
Вот есть ХТМЛ:

<table width=95% border=0 cellspacing=1 cellpadding=2>
<tr>
<td width=1% align=center valign=top>

            <a href="index.php?productID=1878">
            <img src="products_pictures/16_1310_small.jpg" 
                alt="16/1310 FCL/Т9 22W" 
                border=0><br>
            подробнее...
        </a>
    
</td>

<td valign=top width=99%>

    <table width=100% border=0 cellpadding=2>
        <tr>
            <td valign=top>
                <table border=0 cellpadding=0 cellspacing=0>
                    <tr>
                        <td>
                            <a class=cat href="index.php?productID=1878">
                                16/1310 FCL/Т9 22W
                            </a>
                            <br>
                                                    </td>
                    </tr>
                </table>
            </td>
    <!--         <td align=right valign=top width="100">                 

                <form action="index.php?categoryID=138&prdID=1878" method=post
                        name="HiddenFieldsForm_1878" >

                    
                    

                                    </form>

            </td> -->
        </tr>
        <tr>
        <!--     <td colspan=2>
                                                        
                <b>Цена: 
                <font class=cat color=red>
                   $1.00                </font>
                </b>

                                                             </td> -->
        </tr>



        <form action="index.php?productID=1878" method=post 
            name="MainForm1_1878">

        
        
        </form>

        
        <tr>
            <td colspan=2>
                лампа энергосберегающая кольцевая<br>
<b>16/1310FCL/T9</b><br>
Мощность: <b>220V 22W</b> <br>
Цоколь: <b>G10Q</b><br>
цветовая температура: <b>6400К</b><br>

            </td>
        </tr>


        
        <tr>
            <td colspan=2>
                <form action="" method=post 
                    name="MainForm3_1878">
                                    </form>
            
            </td>
        </tr>

    </table>



    
</td>
</tr>
</table>

Это товар в магазине. Таких вот блоков на странице много.

Вопрос: как мне вырезать из такой странички текст типа:

лампа энергосберегающая кольцевая
16/1310FCL/T9
Мощность: 220V 22W 
Цоколь: G10Q
цветовая температура: 6400К

Или так:

лампа энергосберегающая кольцевая
16/1310FCL/T9
220V 22W 
G10Q
6400К


Тоесть мне нужно взять всю текстовую информацию отсюда...

Писал такой код:

 $file = "c:/tmp/shop/file_1.htm";
 $content = file_get_contents($file);
$pattern = '%<b>(.*)</b><br>\\r\\nМощность:.?<b>(.*)</b>.?<br>%i';
preg_match_all($pattern, $content, $matches, PREG_PATTERN_ORDER);

for ($i=0; $i< count($matches[0]); $i++) {
  echo "matched: " . $matches[0][$i] . "\n";
  echo "part 1: " . $matches[1][$i] . "\n";
  echo "part 2: " . $matches[3][$i] . "\n";
  echo "part 3: " . $matches[4][$i] . "\n\n";
}

 echo "<pre>";
 print_r($matches);
 echo "</pre>";


И конечно ничего не получается.. :( Хелп ми) Или может у кого есть пример подобного?
Кругом я вижу только текста небольшого объёма.. :(

   
 
 автор: Faraon   (24.10.2007 в 16:12)   письмо автору
 
   для: vladimir_sumy   (24.10.2007 в 15:53)
 

Что типа такого

<pre>
<?php

$s
='<table width=95% border=0 cellspacing=1 cellpadding=2>
<tr>
<td width=1% align=center valign=top>

            <a href="index.php?productID=1878">
            <img src="products_pictures/16_1310_small.jpg"
                alt="16/1310 FCL/Т9 22W"
                border=0><br>
            подробнее...
        </a>

</td>

<td valign=top width=99%>

    <table width=100% border=0 cellpadding=2>
        <tr>
            <td valign=top>
                <table border=0 cellpadding=0 cellspacing=0>
                    <tr>
                        <td>
                            <a class=cat href="index.php?productID=1878">
                                16/1310 FCL/Т9 22W
                            </a>
                            <br>
                                                    </td>
                    </tr>
                </table>
            </td>
    <!--         <td align=right valign=top width="100">

                <form action="index.php?categoryID=138&prdID=1878" method=post
                        name="HiddenFieldsForm_1878" >




                                    </form>

            </td> -->
        </tr>
        <tr>
        <!--     <td colspan=2>

                <b>Цена:
                <font class=cat color=red>
                   $1.00                </font>
                </b>

                                                             </td> -->
        </tr>



        <form action="index.php?productID=1878" method=post
            name="MainForm1_1878">



        </form>


        <tr>
            <td colspan=2>
                лампа энергосберегающая кольцевая<br>
<b>16/1310FCL/T9</b><br>
Мощность: <b>220V 22W</b> <br>
Цоколь: <b>G10Q</b><br>
цветовая температура: <b>6400К</b><br>

            </td>
        </tr>



        <tr>
            <td colspan=2>
                <form action="" method=post
                    name="MainForm3_1878">
                                    </form>

            </td>
        </tr>

    </table>




</td>
</tr>
</table>
'
;
$s=strip_tags($s,"<td><br></td>");
preg_match_all("|<td colspan=2>(.+?)</td>|is",$s,$out);
print_r ($out);
?>

   
 
 автор: vladimir_sumy   (24.10.2007 в 17:41)   письмо автору
 
   для: Faraon   (24.10.2007 в 16:12)
 

Спасибо! Уже лучше!
Но как разбить страничку вот на те вот блоки что я написал?
На страничке много товаров... И они состоят из тех блоков что я написал.
Как можно ограничить прожорливость скобок (.*)


$pattern = '|<table width=95% border=0 cellspacing=1 cellpadding=2>[\n\s]*(.*)</table>|is';

Как можно тут помочь делу? ;)

   
 
 автор: kasmanaft   (24.10.2007 в 18:07)   письмо автору
 
   для: vladimir_sumy   (24.10.2007 в 17:41)
 

> Как можно ограничить прожорливость скобок (.*)

Глобально (повлияет на все *, +) - добавить модификатор "U"
.....=2>[\n\s]*(.*)</table>|isU';
Локально - .....=2>[\n\s]*(.*?)</table>|is

   
 
 автор: EXP   (24.10.2007 в 18:46)   письмо автору
 
   для: kasmanaft   (24.10.2007 в 18:07)
 

или (?U) внутри подвыражения

$text = preg_replace( "#\<\!\-\-((?!\-\-\>).)+\-\-\>#si", '', $text );
// исключение HTML комментариев из обрабатываемого

 preg_match_all("#\<td colspan\=2\>\s*((?U)(?:(?!\<\/td\>|<form).)+)\s*\<\/td\>#si", 
$text, $out, PREG_PATTERN_ORDER  ) ;
var_dump($out[1]);

здесь что-бы пробелы не попадали

   
 
 автор: vladimir_sumy   (24.10.2007 в 19:32)   письмо автору
 
   для: EXP   (24.10.2007 в 18:46)
 

После последней подсказки у меня вылетает сообщение о ошибка в php.exe )

   
 
 автор: EXP   (24.10.2007 в 20:05)   письмо автору
 
   для: vladimir_sumy   (24.10.2007 в 19:32)
 

всмысле после какой?
последний мой ответ я тестил как если весь текст со всеми тегами файла поместить в переменную $text, как $s в варианте со strip_tags().
просто блок вместе с <b></b><br> извлекало.
там если без (?U) , то возвращало пробелы с переносами строк в конце совпадения с шаблоном,
который перед \s* там.

   
 
 автор: kasmanaft   (24.10.2007 в 20:22)   письмо автору
 
   для: vladimir_sumy   (24.10.2007 в 19:32)
 

(?U) должно находиться в скобках.. В смысле ((?U)......)
Но я бы использовать это не стал.

   
 
 автор: vladimir_sumy   (31.10.2007 в 12:29)   письмо автору
 
   для: kasmanaft   (24.10.2007 в 20:22)
 

Всем спасибо! Более менее разобрался, но есть одно маленькое препятсвтвие
Вот шаблон:

$pattern = "|<a href=\"index.php\?productID=(.*)\">.+<img src=\"products_pictures/(.*)\" |isU";

Проблема в том, что тега <img src может и не быть!

Как быть? Может есть какие-то варианты указать что img тэга может не быть?

   
 
 автор: EXP   (31.10.2007 в 23:28)   письмо автору
 
   для: vladimir_sumy   (31.10.2007 в 12:29)
 

уберите совсем из выражения <img src=\"products_pictures/
или попробуйте так
<?
$pattern 
"|<a href=\"index.php\?productID=(.*?)\">.+(?:<img src=\"products_pictures/)?(.*?)\" |is";

   
Rambler's Top100
вверх

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