Autor Zpráva
midlan
Profil
Ahoj, umí někdo s rekurzemi v regulárních výrazech? Jedná o například o výraz, který by matchoval vnořené funkce. Potřeboval bych něco jako tohle (na internetu jsem se dočetl že v Perlu to tak jde, v php bohužel ne :( ):
<?php
$regex = "~[a-zA-Z_][a-zA-Z_\\d]+\\($regex?\\)~";
?>

Matchlo by to:
<?php
funkce();
//ale i:
funkce(druha(treti()));
?>
Tori
Profil
Nahrazujte v cyklu jednotlivá volání funkcí od vnořených k vnějším:

$data = "funkce(druha(treti()))";
$c = 0;
do {
    $data = preg_replace_callback('~(?<funcName>[a-zA-Z_][a-zA-Z_\\d]+)\\((?<args>[^()]*)\\);?~', $callback, $data, -1, $c);
} while ($c > 0);
Předpokládám, že nahrazení vyžaduje i nějakou logiku zpracování parametrů funkcí, proto callback.
midlan
Profil
Tori
Ve skutečnosti se bude jednat o dost složitější výraz, na tomto jsem chtěl jen ukázat jak tu rekurzi myslím. Nahrazení bude řešeno jinak, protože v callback v PHP5.3 nejde použít $this. Jde mi jen o preg_match, dále už to budu zpracovávat přes preg_match_all.
Tori
Profil
midlan:
v callback v PHP5.3 nejde použít $this
Ale dá se to obejít zkopírováním $this do jiné proměnné.
midlan
Profil
Tori:
Ale dá se to obejít zkopírováním $this do jiné proměnné.
Jenže pak nepůjde použít privátní metody objektu, navíc s ten preg_replace_callback mi nechce volat ten callback přitom preg_match vrací true :O

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: