Autor Zpráva
uganda
Profil *
Jak z $xx = {XX neco} neco2 {/XX}, {XX aaaa} bbb {/XX}

dokazu vytahnout neco, neco2 a aaaa, bbb?

zkousel jsem preg_match_all("~{XX(.*)}(.*){/XX}~",$xx,$data);
nevim jestli takhle to muzu udelat nicmene pak nevim jak dal to "vypsat"
Tori
Profil
To není špatné, jen je asi potřeba escapovat ty složené závorky, a změnit to tak, aby .* nebylo "hladové". Taky bych použila flag PREG_SET_ORDER, pole s výsledky bude výhodněji seřazené na procházení pomocí foreach:
preg_match_all('~\{XX(.*)\}(.*)\{/XX\}~sU', $xx, $data, PREG_SET_ORDER);
foreach ($data as $i => $set) {
  echo "<br>č.$i : text ve slož. závorkách = ".$set[1].', text mezi závorkami = '.$set[2];
}
uganda
Profil *
jaj jasny jsem zapomnel pridat to U jinak to funguje, ale nevim jeste jednu vec

kdyz bych mel {XX neco} neco {XXX} neco2 {/XX}

~\{XX(.*)\}(.*)\{XXX}(.*){/XX\}~sU ale potreboval bych aby to {XXX}obsah - bralo jen kdyz ho bude obsahovat jinak at to ignoruje :)
DJ Miky
Profil
Část výrazu můžeš uzavřít do kulatých závorek (podvýraz) a za něj dát otazník – ten značí nepovinnou část:
~\{XX(.*)\}(.*)(\{XXX\}(.*))?\{/XX\}~sU
Případně lze ještě přidat příznak ?: na začátek závorky, aby se nepromítla do pole výskytů $data:
~\{XX(.*)\}(.*)(?:\{XXX\}(.*))?\{/XX\}~sU

(Ještě bylo potřeba přidat zpětná lomítka před složené závorky.)
revolta
Profil *
diky to funguje, jen jeste jedna vec jak by slo udelat to ze by to bylo:

{XX neco} neco {XX2 neco2} neco2 {XX3}  neco3 {/XX}

XX3 - z minulyho prikladu muze ale nemusi byt
XX2 - {XX2 neco2} neco2 - nemusi byt, ale muze se i opakovat

zkousel jsem si to upravit podle regularu vys, ale nedokazu udelat "opakovani" toho XX2 vypisu bud jenom prvni nebo posledni ale ja potrebuji vsechny

Diky za pomoc :)

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

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