Autor Zpráva
janbarasek
Profil
Ahoj,
v proměnné si držím matematický zápis nějakého příkladu, například:
$q = '5^2';
Přičemž když toto začnu nějak jednoduše vyhodnocovat (třeba pomocí eval()), tak tento zápis bude PHP chápat nějak divně, defacto znak "^" interpretuje jako logickou podmínku XOR, která vždy vyhoví.

Lze nějak jednoduše tento výraz přepsat tak (asi regulárním výrazem), aby se vrátil zpět zápis ve smyslu $q = 'pow(5, 2)';?
Zkoušel jsem něco vymyslet, ale nevím jak to řešit v případě, kdy chci umocnit delší řetězec, třeba závorku:
$q = '5^(2+x)+x';
by se mělo přepsat ideálně jako:
$q = 'pow(5, (2+x))+x';

Napadá někoho z vás nějaké elegantní řešení? Lámu si nad tím hlavu už třetí den a na nic použitelného jsem nepřišel. Děkuji.
juriad
Profil
Jelikož regulární výrazy neumí aritmetiku (počítání závorek) nelze to nijak elegantně udělat jen pomocí reg. výrazu.


Použitelné je jen postavit si aritmetický strom a ten pak vyhodnotit.
http://en.wikipedia.org/wiki/Shunting-yard_algorithm
http://stackoverflow.com/a/4590047

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: