Regexp Hulp

Status
Niet open voor verdere reacties.

ErikBooy007

Terugkerende gebruiker
Lid geworden
24 mei 2007
Berichten
3.814
Ik ben een 'applicatie' aan het schrijven om formules te plotten. Nu zou dit normaal gesproken geen probleem zijn, ware het niet dat ik met userinput te maken heb.

Ik kan dus niet verwachten dat men:

PHP:
pow(x,4) + 6 * pow(x, 2) + 12;

invult, maar men zal waarschijnlijk:

PHP:
x^4 + 6x^2 + 12

invullen.

Dit moet ik nu dus omzetten naar een formaat waar PHP mee kan rekenen. Er moeten allerlei formules kunnen worden ingevuld, sinussen, cosinussen, e-machten etc, dus een invoer veld voor a, b en c in de formule x^a + bx + c voldoet niet.

Als ik nu x^4 heb, kan ik dat middels preg_replace veranderen naar: pow(x, 4) door de volgende regex:

PHP:
preg_replace('/x\^([0-9])+/', 'pow(x, \\1)', $_POST['formula']);

Maar ik bedacht mij, wat als een gebruiker (x+2)^2 invoert?

Waar ik graag hulp bij zou willen is het 'bedenken' van een regex om de volgende formules om te toveren naar een parseable formaat.

Voorbeelden:

PHP:
x^2       -> pow(x, 2)
x^4       -> pow(x, 4)
(x+2)^2   -> pow(x + 2, 2)
x^(x+2)   -> pow(x, x+2)

Heel universeel is het dus:

PHP:
a^b -> pow(a, b)

waarbij a en b kunnen variëren van x tot een getal tot een expressie tussen haakjes.

Ik hoop dat het verhaal nog een beetje duidelijk is en bij voorbaat dank!
 
Na nog flink wat te hebben gezocht heb ik inmiddels de volgende class gevonden:

MathEval

Die parst door gebruikers ingegeven formules exact zoals het hoort!

Als er geïnteresseerden zijn zal ik als de 'app' klaar is wel een linkje plaatsen.
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan