PHP fóra: Builder | JakPsatWeb | Webtrh
Nejste přihlášen(a)
Potřeboval bych poradit s následující věci, už si opravdu nevím rady.
Mám následující řetězec, který potřebuju naformátovat:
<?php
$s = "<!-- if: podminka -->Tato podmínka<strong> platí</strong> poprvé!<!-- endif: podminka -->
<!-- if: podminka -->Tato podmínka<strong> platí</strong> podruhé!<!-- endif: podminka -->
";
?>
Pokud použiji kód:
<?php
preg_match("/<!-- if: (\w*) -->(.*)<!-- endif: \\1 -->/",$s,$matches);
?>
Matches je celkem logicky:
<?php
Array
(
[0] => <!-- if: podminka -->Tato podmínka<strong> platí</strong> poprvé!<!-- endif: podminka --><!-- if: podminka -->Tato podmínka<strong> platí</strong> podruhé!.<!-- endif: podminka -->
[1] => podminka
[2] => Tato podmínka<strong> platí</strong> poprvé!<!-- endif: jedna --><!-- if: jedna -->Tato podmínka<strong> platí</strong> podruhé!
)
?>
Já, ale potřebuji kód, který každou podmínku zformátuje zvlášť. Tak mě napadlo negovat ''<!-- if: ", ale nevím jak negovat blok textu.
Jinými slovy aby matches byl:
<?php
Array
(
[0] => <!-- if: podminka -->Tato podmínka<strong> platí</strong> poprvé!<!-- endif: podminka -->
[1] => podminka
[2] => Tato podmínka<strong> platí</strong> poprvé!
)
?>
a podruhé:
<?php
Array
(
[0] => <!-- if: podminka -->Tato podmínka<strong> platí</strong> podruhé!<!-- endif: podminka -->
[1] => podminka
[2] => Tato podmínka<strong> platí</strong> podruhé!
)
?>
Děkuju moc za vaši pomoc :)
Editoval anubite (17. 3. 2010 20:27)
nechápu co myslíš tou negací
tuším, že to co potřebuješ je preg_match_all() a ungreedy matching – modifikátor „U“
preg_match_all("/<!-- if: (\w*) -->(.*)<!-- endif: \\1 -->/U", $s, $matches);
Řešili jsem to moc složitě. Právě jsem našel info o ungreedy
modifikátoru. Takhle to funguje.
Díky
Editoval anubite (17. 3. 2010 21:56)