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

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

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

 

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

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

тема: Помогите с регулярным
 
 автор: куч1963   (05.08.2014 в 18:47)   письмо автору
 
 

Есть таблица
<TABLE cellSpacing=1 cellpadding=2 class=text>
<TBODY>
<TR>
<TD class=bg1 colSpan=2><font class=txtb>НАЗВАНИЕ РАЗДЕЛА 1</font></TD></TR>
<TR class=bg2>
<TD><font class=txtb>НАИМЕНОВАНИЕ</font></TD>
<TR class=bg2>
<TD><font class=txtb>НАИМЕНОВАНИЕ</font></TD>
<TD> ДАННЫЕ</TD></TR>
<TR class=bg2>
<TD><font class=txtb>НАИМЕНОВАНИЕ</font></TD>
<TD> ДАННЫЕ</TD></TR>
TD class=bg1 colSpan=2><font class=txtb>НАЗВАНИЕ РАЗДЕЛА 2</font></TD></TR>
<TR class=bg2>
<TD><font class=txtb>НАИМЕНОВАНИЕ</font></TD>
<TR class=bg2>
<TD><font class=txtb>НАИМЕНОВАНИЕ</font></TD>
<TD> ДАННЫЕ</TD></TR>
<TR class=bg2>
<TD><font class=txtb>НАИМЕНОВАНИЕ</font></TD>
<TD> ДАННЫЕ</TD></TR>
</TBODY></TABLE>


Надо выдернуть и вывести данные в виде:
НАЗВАНИЕ РАЗДЕЛА 1
НАИМЕНОВАНИЕ - ДАННЫЕ
НАИМЕНОВАНИЕ - ДАННЫЕ
НАИМЕНОВАНИЕ - ДАННЫЕ

НАЗВАНИЕ РАЗДЕЛА 2
НАИМЕНОВАНИЕ - ДАННЫЕ
НАИМЕНОВАНИЕ - ДАННЫЕ
НАИМЕНОВАНИЕ - ДАННЫЕ

Пытался вырезать
preg_match_all('~<TD class=bg1 colSpan=2><font class=txtb>(.*?)</font></TD>~is', $content , $text2);    
    
preg_match_all('~<TD><font class=txtb>(.*?)</font></TD>
<TD>(.*?)</TD>~is', $content , $text);

Но в цикле не получается скомпоновать нужный формат вывода(( Помогите советом пож

  Ответить  
 
 автор: Deed   (11.08.2014 в 23:11)   письмо автору
 
   для: куч1963   (05.08.2014 в 18:47)
 

[url]http://sandbox.onlinephpfunctions.com/code/eb15d80870364c4b66aa0226dd77857087c 1ceb9[/url]


<?php
$str
='<TABLE cellSpacing=1 cellpadding=2 class=text>
<TBODY>
<TR>
<TD class=bg1 colSpan=2><font class=txtb>НАЗВАНИЕ РАЗДЕЛА 1</font></TD></TR>
<TR class=bg2>
<TD><font class=txtb>НАИМЕНОВАНИЕ</font></TD>
<TR class=bg2>
<TD><font class=txtb>НАИМЕНОВАНИЕ</font></TD>
<TD> ДАННЫЕ</TD></TR>
<TR class=bg2>
<TD><font class=txtb>НАИМЕНОВАНИЕ</font></TD>
<TD> ДАННЫЕ</TD></TR>
TD class=bg1 colSpan=2><font class=txtb>НАЗВАНИЕ РАЗДЕЛА 2</font></TD></TR>
<TR class=bg2>
<TD><font class=txtb>НАИМЕНОВАНИЕ</font></TD>
<TR class=bg2>
<TD><font class=txtb>НАИМЕНОВАНИЕ</font></TD>
<TD> ДАННЫЕ</TD></TR>
<TR class=bg2>
<TD><font class=txtb>НАИМЕНОВАНИЕ</font></TD>
<TD> ДАННЫЕ</TD></TR>
</TBODY></TABLE>'
;

$n=preg_match_all("/<font[^>]+?>([А-ЯЁ\s\d]+)<\/font>/u",$str,$m);
            
for(
$i=0;$i<$n;$i++){
    echo 
$m[1][$i]."\n";
}
?>


P.S. What is fuck with links on this site???

  Ответить  
 
 автор: куч1963   (11.08.2014 в 23:49)   письмо автору
 
   для: Deed   (11.08.2014 в 23:11)
 

Warning: preg_match_all() [function.preg-match-all]: Compilation failed: nothing to repeat at offset 13
что за бодяга?
Немного не то по функционалу. Выдергивается все из <font, а мне надо получить форматированный вывод
как вариант
<TR>
<TD class=bg1 colSpan=2><font class=txtb>НАЗВАНИЕ РАЗДЕЛА 1</font></TD></TR>
<TR class=bg2>
<TD><font class=txtb>НАИМЕНОВАНИЕ</font></TD>
<TD> ДАННЫЕ</TD></TR>

вывести в виде
<h2>НАЗВАНИЕ РАЗДЕЛА 1
НАИМЕНОВАНИЕ -- ДАННЫЕ

<h2>НАЗВАНИЕ РАЗДЕЛА 2
НАИМЕНОВАНИЕ 2 -- ДАННЫЕ 2

  Ответить  
 
 автор: Deed   (12.08.2014 в 00:00)   письмо автору
 
   для: куч1963   (11.08.2014 в 23:49)
 

Вверху ссылка (пробелы убрать) на онлайн-компилятор.
И пусть админ ЭТОГО сайта поправит парсер ссылок.
Позорище какое...

А, невнимательно прочитал суть проблемы. Но уже только завтра смогу помочь.
Всех благ!

  Ответить  
 
 автор: куч1963   (12.08.2014 в 00:08)   письмо автору
 
   для: Deed   (12.08.2014 в 00:00)
 

Спасибо за помощь.

  Ответить  
 
 автор: blg_step   (12.08.2014 в 12:55)   письмо автору
 
   для: куч1963   (05.08.2014 в 18:47)
 

У меня как- то так получилось:
(Выводится много лишнего, но это чтоб тебе проще было разобраться в коде)
<?php

$text= '
<table cellSpacing="1" cellpadding="2" border="1" class="text">
<tbody>
<tr>
<td class="bg1" colSpan="2"><font class="txtb">НАЗВАНИЕ РАЗДЕЛА 1</font></td>
</tr>

<tr class="bg2">
<td><font class="txtb">НАИМЕНОВАНИЕ1_1</font></td>
<td> ДАННЫЕ1_1</td>
</tr>

<tr class="bg2">
<td><font class="txtb">НАИМЕНОВАНИЕ1_2</font></td>
<td> ДАННЫЕ1_2</td>
</tr>

<tr class="bg2">
<td><font class="txtb">НАИМЕНОВАНИЕ1_3</font></td>
<td> ДАННЫЕ1_3</td>
</tr>



<tr class="bg2">
<td class="bg1" colSpan="2"><font class="txtb">НАЗВАНИЕ РАЗДЕЛА 2</font></td>
</tr>

<tr class="bg2">
<td><font class="txtb">НАИМЕНОВАНИЕ2_1</font></td>
<td> ДАННЫЕ2_1</td>
</tr>

<tr class="bg2">
<td><font class="txtb">НАИМЕНОВАНИЕ2_2</font></td>
<td> ДАННЫЕ2_2</td>
</tr>

<tr class="bg2">
<td><font class="txtb">НАИМЕНОВАНИЕ2_3</font></td>
<td> ДАННЫЕ2_3</td>
</tr>

<tr class="bg2">
<td><font class="txtb">НАИМЕНОВАНИЕ2_4</font></td>
<td> ДАННЫЕ2_3</td>
</tr>




<tr class="bg2">
<td class="bg1" colSpan="2"><font class="txtb">НАЗВАНИЕ РАЗДЕЛА 3</font></td>
</tr>

<tr class="bg2">
<td><font class="txtb">НАИМЕНОВАНИЕ3_1</font></td>
<td> ДАННЫЕ2_1</td>
</tr>

<tr class="bg2">
<td><font class="txtb">НАИМЕНОВАНИЕ3_2</font></td>
<td> ДАННЫЕ2_2</td>
</tr>

<tr class="bg2">
<td><font class="txtb">НАИМЕНОВАНИЕ3_3</font></td>
<td> ДАННЫЕ2_3</td>
</tr>

</tbody>
</table>
';

$pattern='#<td class="bg1" colSpan="2"><font class="txtb">(.*?)</font></td>#is';
$pattern2='#<td><font class="txtb">(.*?)</font></td>[\s]*'.
'<td>[\s]*(.*?)</td>#isu';

$flag=PREG_OFFSET_CAPTURE;
$offset=0;


preg_match_all($pattern, $text, $naidennoe, $flag, $offset);
preg_match_all($pattern2, $text, $naidennoe2, $flag, $offset);


echo '<p>Надо выдернуть и вывести данные в виде:</p>

НАЗВАНИЕ РАЗДЕЛА 1 <br />
НАИМЕНОВАНИЕ - ДАННЫЕ<br />
НАИМЕНОВАНИЕ - ДАННЫЕ<br />
НАИМЕНОВАНИЕ - ДАННЫЕ<br />
<br /><br />
НАЗВАНИЕ РАЗДЕЛА 2<br />
НАИМЕНОВАНИЕ - ДАННЫЕ<br />
НАИМЕНОВАНИЕ - ДАННЫЕ<br />
НАИМЕНОВАНИЕ - ДАННЫЕ<br />

<hr />';

echo $text;
/*
if (preg_match_all($pattern, $text, $naidennoe, $flag, $offset))
{
echo '<h2>Массив 1 (Массив заголовков)</h2>';
print_r($naidennoe);
}else
{
echo 'лажа какая-то получилась вместо массива1';
}

echo '<hr />';

if (preg_match_all($pattern2, $text, $naidennoe2, $flag, $offset))
{
echo '<h2>Массив 2 (Массив строк и ячеек из таблицы)</h2>';
print_r($naidennoe2);
}else
{
echo 'лажа какая-то получилась вместо массива2';
}
echo '<hr />';*/

echo '<hr /><pre>';
$poziciya=0;
for($i=0; $i<count($naidennoe[1]); $i++){
echo $naidennoe[1][$i][0] . '<br />';


if ($naidennoe[1][$i+1][1]){
for($j=$poziciya; $j<count($naidennoe2[1]); $j++){
if ($naidennoe[1][$i+1][1] > $naidennoe2[1][$j][1]){
echo $naidennoe[1][$i+1][1] . ' > ' . $naidennoe2[1][$j][1] . ' === ' . $naidennoe2[1][$j][0] . ' &ndash; ' . $naidennoe2[2][$j][0] . '<br />';
}else {
$poziciya=$j;
//echo '$poziciya=' . $poziciya . '<br />';
break;
}
}
}else {
//echo '$poziciya=' . $poziciya . '<br />';
for($j=$poziciya; $j<count($naidennoe2[1]); $j++){
echo $naidennoe2[1][$j][0] . ' &ndash; ' . $naidennoe2[2][$j][0] . '<br />';
}
}
}

echo '</pre>';
?>


результат работы, можно посмотреть здесь: http://php.mejstrok.ru/regylyarki.html

  Ответить  
 
 автор: куч1963   (12.08.2014 в 20:29)   письмо автору
 
   для: blg_step   (12.08.2014 в 12:55)
 

все трудится, спасибо

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

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