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); |
||
midlan Profil |
#3 · Zasláno: 1. 9. 2012, 15:33:05
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 |
#4 · Zasláno: 1. 9. 2012, 15:38:45
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 |
#5 · Zasláno: 1. 9. 2012, 16:11:43
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 |
||
Časová prodleva: 12 let
|
0