Регулярен израз

dhtodorov

Registered
Здравейте,

трябва ми малко помощ с един регулярен израз. Трябва да взема всичко между тези тагове :

<table class="webcol" ... ></table>

Проблема ми е, че не съм много на ТИ с тези регулярни изрази. Нещата които пробвах не ми помогнаха.
 
$text = "<table class="webcol" ... ></table> ";
$raz = explode("</table> ",$text);
$raz2 = explode('<table class="webcol"...>',$raz[0]);
echo$raz2[1];

Замени многоточието с истинския код :?:
 
purko каза:
$text = "<table class="webcol" ... ></table> ";
$raz = explode("</table> ",$text);
$raz2 = explode('<table class="webcol"...>',$raz[0]);
echo$raz2[1];

Замени многоточието с истинския код :?:

Многоточието е динаме... няма как да го заменя с истинският код.

Трябва ми по-възможност с preg_match.
 
Код:
<?php
$string = '<sth><table class="webcol" style="asd" align="center">INSIDE>asd</table></sth><oth>others</other>';
preg_match("|\<table class=\"webcol\" [^>]+>(.*)\<\/table\>|im", $string, $mathes);
echo $mathes[1];
?>
 
Ето до къде стигнах аз.

preg_match('/^(\<[table\sclass\="webcol"\sheight\="12538"\scellpadding\="2"\sborder\="0"]\>)(.*)(\<[\/table]\>)/isUm',$page,$match);
echo '<pre>';
print_r($match);


Хардкоднах стойностите на таблицата. Искам да ги взема така, а после ще измисля начин да ги хващам динаме.

Само, че горният шаблон не ми върши работа...

Взима други неща, но не и това което ми трябва...
 
FestarBG каза:
Написъл съм израза в предишния ми пост.. :?:

Не върши работа. Тествах го и за това показах, аз до къде съм стигнал.

Ако имаш идеи за друго..
 
Може би, аз не съм се изразил правилно... Значи ето за какво точно иде реч.

Имаме таблица

Код:
<table class="webcol" height="12538" cellpadding="2" border="0">

Това което имах впредвид с многоточието е, че тези height,cellpadding,border има възможност да са с различни стойности.
Иначе целта ми е да взема всичко В таблицата ( в отговор на Replace ).
Таблицата има над 500 реда в нея и около 5 колони на ред.
Искам да ги взема всичките за да мога после да ги обработя. Само, че освен с preg_match нямам в момента друга идеа какво ще ми свърши работа.
 
Ето ти го с примера направо
$html = '<table class="webcol" align="center" cellspacing="5" cellpadding="5" style="text-align: center;"> <tr> <td> ,флсамла #1 </td> <td> fmalsmfla #2 </td> </tr> <tr> <td> fmlsafa #3 </td> <td> fmlasfmla #4 </td> </tr> </table>';
preg_match_all("/<table class=\"webcol\".*> (.*) <\/table>/Ui",$html,$matches);
print_r($matches);
 
Код:
<?php
$string = '<sth><table class="webcol" height="12538" cellpadding="2" border="0"><tr><td>1</td></tr><tr><td>2</td></tr><tr><td>3</td></tr></table></sth><oth>others</other>';
preg_match("|\<table class=\"webcol\" ([^>]+?)>(.*)\<\/table\>|im", $string, $mathes);
print_r($mathes);
?>

Пак не съм сигурен че те разбрах, но мисля че ти трябва третия елемент от масива $mathes.. :roll:
 
:idea:
Наистина постни тука един примерен код , както си е и да пробваме с нея. Явно , има нещо друго , което пречи на кодовете. Преди да добавя поста си го изпробвах и си работеше (може да видиш примера на предната страница ,едитнах си поста).
 
Ето част от таблицата...

Код:
<div align="center">
    <table class="webcol" border="0" cellpadding="2" height="12538">
      <tr>
      <td class="grey5" align="center" height="8"><font color="#FFFFFF"><b>Colour Name</b></font></td>

      <td class="grey5" align="center" height="8"><font color="#FFFFFF"><b>Col</b></font></td>
      <td class="grey5" align="center" height="8"><font color="#FFFFFF"><b>Select a Colour</b></font></td>
      <td class="grey5" align="center" height="8"><font color="#FFFFFF"><b>Hex</b></font></td>
      <td class="grey5" align="center" height="8"><font color="#FFFFFF"><b>R</b></font></td>
      <td class="grey5" align="center" height="8"><font color="#FFFFFF"><b>G</b></font></td>
      <td class="grey5" align="center" height="8"><font color="#FFFFFF"><b>B</b></font></td>

      <td class="grey5" align="center" height="8"><font color="#FFFFFF"><b>Access</b></font></td>
      </tr>
      <tr>
        <td align='right' height="16"><font color='#B0171F'>indian red</font></td>
        <td bgcolor='#B0171F' height="16"> </td>
        <td bgcolor='#FFFFFF' height="16"><a href="javascript:colorchange('B0171F')">indian red</a></td>
        <td bgcolor='#FFFFFF' height="16">#B0171F</td>

        <td bgcolor='#FFFFFF' height="16">176</td>
        <td bgcolor='#FFFFFF' height="16">23</td>
        <td bgcolor='#FFFFFF' height="16">31</td>
        <td bgcolor='#FFFFFF' height="16">2037680</td>
      </tr>
      <tr>
        <td align='right' height="16"><font color='#DC143C'>crimson</font></td>

        <td bgcolor='#DC143C' height="16"> </td>
        <td bgcolor='#FFFFFF' height="16"><a href="javascript:colorchange('DC143C')">crimson</a></td>
        <td bgcolor='#FFFFFF' height="16">#DC143C</td>
        <td bgcolor='#FFFFFF' height="16">220</td>
        <td bgcolor='#FFFFFF' height="16">20</td>
        <td bgcolor='#FFFFFF' height="16">60</td>

        <td bgcolor='#FFFFFF' height="16">3937500</td>
      </tr>
 
<?php
$string = <<<EOT


<div align="center">
<table class="webcol" border="0" cellpadding="2" height="12538">
<tr>
<td class="grey5" align="center" height="8"><font color="#FFFFFF"><b>Colour Name</b></font></td>

<td class="grey5" align="center" height="8"><font color="#FFFFFF"><b>Col</b></font></td>
<td class="grey5" align="center" height="8"><font color="#FFFFFF"><b>Select a Colour</b></font></td>
<td class="grey5" align="center" height="8"><font color="#FFFFFF"><b>Hex</b></font></td>
<td class="grey5" align="center" height="8"><font color="#FFFFFF"><b>R</b></font></td>
<td class="grey5" align="center" height="8"><font color="#FFFFFF"><b>G</b></font></td>
<td class="grey5" align="center" height="8"><font color="#FFFFFF"><b>B</b></font></td>

<td class="grey5" align="center" height="8"><font color="#FFFFFF"><b>Access</b></font></td>
</tr>
<tr>
<td align='right' height="16"><font color='#B0171F'>indian red</font></td>
<td bgcolor='#B0171F' height="16"> </td>
<td bgcolor='#FFFFFF' height="16"><a href="javascript:colorchange('B0171F')">indian red</a></td>
<td bgcolor='#FFFFFF' height="16">#B0171F</td>

<td bgcolor='#FFFFFF' height="16">176</td>
<td bgcolor='#FFFFFF' height="16">23</td>
<td bgcolor='#FFFFFF' height="16">31</td>
<td bgcolor='#FFFFFF' height="16">2037680</td>
</tr>
<tr>
<td align='right' height="16"><font color='#DC143C'>crimson</font></td>

<td bgcolor='#DC143C' height="16"> </td>
<td bgcolor='#FFFFFF' height="16"><a href="javascript:colorchange('DC143C')">crimson</a></td>
<td bgcolor='#FFFFFF' height="16">DC143C</td>
<td bgcolor='#FFFFFF' height="16">220</td>
<td bgcolor='#FFFFFF' height="16">20</td>
<td bgcolor='#FFFFFF' height="16">60</td>

<td bgcolor='#FFFFFF' height="16">3937500</td>
</tr></table>
EOT;
$string = str_replace("\n","",$string);
preg_match("|\<table class=\"webcol\" ([^>]+?)>(.*)\<\/table\>|i", $string, $mathes);
echo $mathes[2];
?>

Засега така..после ще потърся вариант и без да се премахват новите редове.. :)
 
FestarBG каза:
И то е?
:roll:

Ами първо с preg_match_all ще взема всичко между таговете <tr></td>

Код:
preg_match_all('/<tr>(.*)<\/tr>/',$page,$matches);

След което ще ги обработя с един for и ще взема точно тези <tr>-та които ми трябват... след което ще ги explode-на за да мога да ги набухам всяко едно от техните тд-та в масив и да извлека информацията от тях.

Малко по-дълго става ама все тая :-) Все пак скрипта ще се ползва само веднъж.

Мерси пак, че помогнахте.
 

Back
Горе