Autor | Zpráva | ||
---|---|---|---|
SpotRudloff Profil |
#1 · Zasláno: 27. 12. 2012, 16:46:25
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á ) ) |
||
Časová prodleva: 11 let
|
0