Witam,
szukałem odpowiedzi na pytanie w google, szukałem i na forum, jednak nic nie znalazłem... być może dla tego że nie bardzo wiem jak to nazwać ;P więc jeśli taki temat już był bardzo przepraszam i proszę o naprowadzenie na niego.

przypuśćmy że mam taki kod:
  1. <?php
  2. $str = '{abc abc} {def^2}, zzz {ghi100%(ihg)} zzz {jkl+} {mno=o(onm)} zzz zz z {prs}';
  3. preg_match_all( "#.*{(.*?[^}{])((.*?[^}{]))}.*#si", $str, $result );
  4. print_r( $result );
  5. ?>


str jest to zwyczajny tekst, w którym słowa w nawiasach klamrowych mają być zamieniane na linki. To co jest bezpośrednio w tych nawiasach może być literami (również japońskimi, stąd głównie problem), cyframi, znakami specjalnymi itp. W nawiasach zwykłych, wewnątrz klamrowych będzie tylko typ linku, będzie on już sie składał jedynie z liter.

Wynikiem działania tego skryptu jest:
Kod
Array (
    [0] => Array (
            [0] => {abc abc} {def^2}, zzz {ghi100%(ihg)} zzz {jkl+} {mno=o(onm)} zzz zz z {prs}
        )
    [1] => Array (
            [0] => mno=o
        )
    [2] => Array (
            [0] => onm
        )
)

Czyli kod potrafi wyciągnąć taki nawias, ale tylko ten znajdujący się najbliżej końca, jeśli są dwa, pierwszy nie jest widoczny. Ma ktoś może pomysł jak wyciągnąć oba te nawiasy w jednym zapytaniu?

Pozdrawiam.

ehhh... już sobie poradziłem, wystarczyło pokierować się trochę logiką winksmiley.jpg

być może komuś sie przyda rozwiązanie:
  1. <?php
  2. preg_match_all( "#{([^}]*?)((.*?))}#si", $str, $result );
  3. ?>