Autor Zpráva
SpotRudloff
Profil
Zdravim.
Mám regulární výraz.

$slovo = preg_match_all("/(\w*)\((.*)\)/i", $text, $nalezeno);

Tento výraz by měl najít v textu všechna slova a závorky, které po nich následují. Jenže pokud je v závorce taky závorka, najde to jen tu hlavní, ve které je ta druhá.

Např.:
Bla bla text super (a tady je závorka (a tady je dokonce druhá) bla bla).

Výraz vyhledá super (a tady je závorka (a tady je dokonce druhá) bla bla) ale už nenajde závorka (a tady je dokonce druhá).

Může někdo pomoct?
DJ Miky
Profil
Nevím, jestli tohle půjde vyřešit samotným regulárním výrazem, asi bude zapotřebí to rekurzivně prohledávat znovu a znovu. Inspirací z tohoto komentáře jsem sestavil funkci:

function zavorky($str) {
    $vysledek = array();
    
    preg_match_all('/(?:(\w+)\s*)?\(((?:[^()]*|(?R))*)\)/u', $str, $nalezeno, PREG_SET_ORDER);
    
    foreach((array)$nalezeno as $nalez) {
        $vysledek[] = $nalez;
        $vysledek = array_merge($vysledek, zavorky($nalez[2]));
    }
    
    return $vysledek;
}

Výsledek:

print_r(zavorky('Bla bla text super (a tady je závorka (a tady je dokonce druhá) bla bla).'));

Array
(
    [0] => Array
        (
            [0] => super (a tady je závorka (a tady je dokonce druhá) bla bla)
            [1] => super
            [2] => a tady je závorka (a tady je dokonce druhá) bla bla
        )

    [1] => Array
        (
            [0] => závorka (a tady je dokonce druhá)
            [1] => závorka
            [2] => a tady je dokonce druhá
        )

)

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: