Autor | Zpráva | ||
---|---|---|---|
Hologos Profil |
#1 · Zasláno: 19. 10. 2011, 13:50:48
Zdravím,
řeším takový menší problém a nedokážu k tomu sestrojit správný regulární výraz. Zatím se mi povedlo vytvořit regulár, abych nahradil, co jsem potřeboval, ale tady se mi to nepovedlo: {if|$margin>=5}Ok.{/if} Samozřejmě chci mít někdy i složitější podmínku: {if|$margin>=5 && $amount != 0}Ok.{/if} Tak jsem si udělal tenhle regulár: $condition = '(\$[a-z_][a-z0-9_]*|[\+\-\*\/0-9\.\<\>\=]+|[\&\|\!]+|[\(\)]+|[\w]*)*'; $data = preg_replace('~{if\|'.$condition.'}(.*){\/if}~iU', "<?php if(\\1) { ?>\\2<?php } ?>", $data); Když jsem to zkoušel debuggovat přes preg_replace_callback, tak mi to jako matches vracelo (1. příklad): array(3) { [0] => string(25) "{if|$margin>=5}Ok.{/if}" [1] => string(1) "5" [2] => string(3) "Ok." } Takže mám špatně napsanej regulár, protože z celý tý závorky, kde je několik ORů, to vezme jen jednu možnost. Proto jsem tam dal nakonec ještě +, aby se mohlo opakovat, ale asi to tak nejde napsat. Poradí někdo? Díky za rady. |
||
Joker Profil |
#2 · Zasláno: 19. 10. 2011, 14:13:04
Hologos:
Bych řekl, že regulár funguje, ale protože celá ta závorka v $condition se může opakovat, v poli zůstane uložené jen to co tam bylo naposledy, tj. 5. Nebylo by ale lepší se na to celé vykašlat a nechat přímo ten vstup jako PHP? Přijde mi to, že tak jak to je udělané je to jenom složitější a nemá to žádné výhody. |
||
Hologos Profil |
#3 · Zasláno: 19. 10. 2011, 14:25:21
Joker
Jde o to, že nechci psát jen kvůli proměnné <?php echo $promenna; ?>, ale stačí mi pak napsat {$promenna} s tím, že se mi i escapuje podle toho, v jakém kontextu je. A když už budu mít proměnnou, tak jsem chtěl alespoň if a foreach, to by mi stačilo. Nevíš, jak to udělat tak, aby mi to nahradilo všechno? To $condition tam je proto, aby mi to třeba nevzalo třeba \ do podmínky. Mohl bych to nahradit (.+), ale to se mi zdá, že jsem se na to spíš vykašlal, než že jsem to vyřešil. |
||
Joker Profil |
#4 · Zasláno: 19. 10. 2011, 14:50:03 · Upravil/a: Joker
Hologos:
„nechci psát jen kvůli proměnné <?php echo $promenna; ?>“ Čili je to vlastně jen jakýsi zkrácený zápis do PHP souborů? Kvůli tomu bych novou syntaxi nevymýšlel. Hlavně kdyby pak ten kód měl upravovat někdo jiný. Jinak ale na proměnné by stačil daleko jednodušší regulár. U toho IF mi to nijak úspornější nepřijde: {if|$margin>=5} foo(); {/if} <?php if($margin>=5) foo(); ?> |
||
Hologos Profil |
#5 · Zasláno: 19. 10. 2011, 15:55:47
Ale tohle mi nezaruší správné escapování.
Můžeš mi spíš poradit, jak to udělat tak, jak to potřebuji? Díky |
||
Joker Profil |
#6 · Zasláno: 19. 10. 2011, 16:24:35
Hologos:
„Ale tohle mi nezaruší správné escapování.“ Jaké escapování? Jestli se ten kód uvnitř má nějak skriptem rozebírat, kontrolovat anebo zpracovávat, tak to pomocí regulárních výrazů nepůjde, nebo minimálně to bude extrémně obtížné. Na to by bylo potřeba si napsat parser. |
||
Hologos Profil |
#7 · Zasláno: 19. 10. 2011, 17:04:38
Tak díky za pomoc, ale budu doufat, že se najde někdo, kdo mi poradí a nebude to řešit.
Nenapsal jsem tunu věci, které jsou okolo, a ani to nechci psát, protože to je irelevantní. Napsal jsem, jaký mám problém, a ten chci vyřešit. Díky. |
||
Časová prodleva: 14 let
|
0