Autor Zpráva
na1k
Profil
Potřeboval bych pomoct s reg. výrazem (ve formátu pro php funkci ereg), cíl je takový:
{?chyba}<div>Chyba: bla bla bla</div>{?/chyba}
 bla bla bla 
<table>
   {?chyba}<tr><td>...</td></tr>{?/chyba}
   <tr><td>bla</td></tr>
</table>


Z tohoto kódu se snažím pomocí výrazu dostat obsah mezi bloky {?chyba} a {?/chyba}. Problém je v tom, že potřebuji první blok a potom hned ten nejbližší ukončovací. Stvořil jsem tento výraz:
{\?chyba}(.*){\?/chyba}


Problém ale je, že výraz vrací obsah mezi prvním a úplně posledním blokem, což je špatně. Vím, že chyba je v (.*), ale nenapadá mě, čím nahradit tečku tak, aby vylučovala ukončovací blok {?/chyba} a zárověň umožňovala další otevírací {?chyba} :-(

Předem děkuji dobré duši, která mi poradí. Zřejmě to není nic složitého, ale já jsem, co se výrazů týče, spíše začátečník, a přestože jsem si procházel syntaxi, nenapadlo mě žádné řešení :-(
nightfish
Profil
v PCRE by to bylo
preg_match("/{\?chyba}(.*){\?\/chyba}/U", $retezec, $matches)

případně, pokud bys jich chtěl víc (všechny), tak preg_match_all

Vaše odpověď


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0