#1 před 3 lety

JannBaill
Člen
Registrovaný: 9. 5. 2009
Příspěvky: 93

Regulární výraz nefunguje i když by nejspíš měl

Zdravím :). Mám tento HTML kód:

<td  align='center' style='width: 50%'>
                 <table>
                    <tr>
                       <td><img src='../pictures/skilly/Cannibalize.gif' alt=''></td>
                    </tr>
                 </table>
              </td>
              <td  align='center' style='width: 50%'>
                 <table>
                    <tr>
                       <td><img src='../pictures/skilly/Cannibalize.gif' alt=''></td>
                    </tr>
                 </table>
              </td>

ze kterého potřebuju vytáhnout cestu k obrázku, což dělám takhle:

<?php
$text = '*kód*';
$a = preg_match_all('#<td  align=\'center\' style=\'width: 50%\'>[\v\s]*<table>[\v\s]*<tr>[\v\s]*<td><img src=\'../pictures/skilly/([\w ]+)\.gif\' alt=\'\'</td>[\v\s]*</tr>[\v\s]*</table>[\v\s]*</td>#i', $text, $result);
?>

Jenže tento výraz mi najde pouze první cestu (cesty se mění, proto regulární výraz). Postupným mazáním jsem zjistil, že víc výsledků najde regulární výraz pouze pokud je takovýto:

<?php
$text = '*kód*';
$a = preg_match_all('#<td  align=\'center\' style=\'width: 50%\'>[\v\s]*<table>[\v\s]*<tr>[\v\s]*<td><#i', $text, $result);
?>

Jakmile na konec výrazu přidám za ,,<" ,,i", výraz najde jenom jednu shodu. Nevíte někdo proč to tak je? Já nad tím dumám už několik hodin a pořád nic :(

 

#2 před 3 lety

Tomik
Nette Evangelist
Registrovaný: 20. 3. 2005
Příspěvky: 566

Re: Regulární výraz nefunguje i když by nejspíš měl

Odhadem bych řekl, že to bude tím, že ti tam chybí uzavírají znak > pro tag img:

Správně tedy:

<?php
$a = preg_match_all('#<td  align=\'center\' style=\'width: 50%\'>[\v\s]*<table>[\v\s]*<tr>[\v\s]*<td><img src=\'../pictures/skilly/([\w ]+)\.gif\' alt=\'\'></td>[\v\s]*</tr>[\v\s]*</table>[\v\s]*</td>#i', $text, $result);
?>

(Tedy za část alt=\'\', přijde ještě >.)

 

#3 před 3 lety

JannBaill
Člen
Registrovaný: 9. 5. 2009
Příspěvky: 93

Re: Regulární výraz nefunguje i když by nejspíš měl

Bylo to tam, díky :).

 

Zápatí