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

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

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

 

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

вид форума:
Линейный форум (новые сообщения вниз) Структурный форум

тема: Парсировать таблицу

Сообщения:  [1-10]   [11-11] 

 
 автор: ladan   (17.02.2012 в 01:09)   письмо автору
 
   для: Sfinks   (16.02.2012 в 03:14)
 

спасибо, все понятно :)

  Ответить  
 
 автор: BMW   (16.02.2012 в 12:49)   письмо автору
 
   для: Sfinks   (16.02.2012 в 03:14)
 

спасибо, вот в итоге получилось как
$norm_td=5;
preg_match('|<table class="wide">(.*?)<td colspan="6"><b>&#160;Обозначения</b></td>|si', $content, $arr); 
preg_match_all('|<tr.*?>(.*?)</tr>|si', $arr[1], $aru);
foreach($aru[1] as $k => $s)
{
    //print_r($s);
    preg_match_all('|rowspan="(.*?)"|si', $s, $num);
    preg_match_all('|<td.*?>(.*?)</td>|si', $s, $ar);
    $ar[1] = preg_replace("#</?[^>]+>#s","",$ar[1]);

    foreach($ar[0] as $ki => $si)
        {

        if(($num[1][0]) and strstr($si,"rowspan="))
        {
    $key=$ki;
    $zamena=$ar[1][$key];
        }

        }
        if(count($ar[1])!=$norm_td)
        foreach($ar[1] as $ku => $su)
            {
            if($ku==$key){$ar[1][$key]=$zamena;$op=1;}
            if($op)$ar[1][$ku+1]=$su;
            }
        $op=0;
print_r($ar[1]);

}
все работает как надо)

  Ответить  
 
 автор: Sfinks   (16.02.2012 в 03:14)   письмо автору
 
   для: ladan   (16.02.2012 в 00:51)
 

Это "не жадный" поиск. Если дана строка:

<teg>text</teg>text<teg>text</teg>text<teg>text</teg>

поиск по маске <teg>.*</teg> найдет <teg>text</teg>text<teg>text</teg>text<teg>text</teg>, т.е. до последнего совпадения (жадный)
а по маске <teg>.*?</teg> найдет <teg>text</teg>, т.е. до первого (не жадный)

  Ответить  
 
 автор: ladan   (16.02.2012 в 00:51)   письмо автору
 
   для: Sfinks   (15.02.2012 в 19:20)
 

а что за констукция
(.*?)
Либо 0, либо сколько угодно и знак вопроса- это 0 или 1...
Первый раз вижу, как она работает? :)

  Ответить  
 
 автор: Sfinks   (15.02.2012 в 19:20)   письмо автору
 
   для: BMW   (15.02.2012 в 19:16)
 

не <td (*?)>, а <td.*?> либо <td[^>]*>

  Ответить  
 
 автор: BMW   (15.02.2012 в 19:16)   письмо автору
 
   для: Sfinks   (15.02.2012 в 19:07)
 

точно, прошу прощения за вопросы, но еще один, а если в тэге td <td rowspan="3"> парсер их не выбирает это надо <td (*?)> прописать? а как число вычленить?

  Ответить  
 
 автор: Sfinks   (15.02.2012 в 19:07)   письмо автору
 
   для: BMW   (15.02.2012 в 18:11)
 

> можно ли выбирать без тегов обрамления <td>
Так в массиве $ar[1] все элементы без тегов.

> а вот только как удалить все остальные тэги
$ar[1] = preg_replace("#</?[^>]+>#s","",$ar[1]);

  Ответить  
 
 автор: BMW   (15.02.2012 в 18:11)   письмо автору
 
   для: Sfinks   (15.02.2012 в 16:04)
 

спасибо! да отлично, а вот только как удалить все остальные тэги и можно ли выбирать без тегов обрамления <td>?
preg_match('|<table class="wide">(.*?)</table>|si', $content, $arr); 
preg_match_all('|<tr>(.*?)</tr>|si', $arr[1], $aru);
foreach($aru[1] as $s)
{
//print_r($s);
preg_match_all('|<td>(.*?)</td>|si', $s, $ar);
print_r($ar);
}

  Ответить  
 
 автор: Sfinks   (15.02.2012 в 16:04)   письмо автору
 
   для: BMW   (15.02.2012 в 09:57)
 

Вот так:
preg_match('|<table class="wide">(.*?)</table>|si', $table, $arr);
preg_match_all('|<td>(.*?)</td>|si', $arr[1], $aru);
print_r($aru);
выбираются все внутренности TD.
Если нужно по строкам, то нужно в цикле перебирать промежуточную выборку TR

  Ответить  
 
 автор: Sfinks   (15.02.2012 в 15:54)   письмо автору
 
   для: BMW   (15.02.2012 в 09:57)
 

1. У меня ваш пример вообще ничего не выводит.
2. А что значит m в |smi ?
3. Вы используете "жадный" поиск (.*) а нужно (.*?)

  Ответить  

Сообщения:  [1-10]   [11-11] 

Форум разработан IT-студией SoftTime
Rambler's Top100
вверх

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