php.de

Zurück   php.de > Webentwicklung > PHP-Fortgeschrittene

PHP-Fortgeschrittene Arbeiten mit PHP ohne Einschränkungen

Antwort
 
LinkBack Themen-Optionen Thema bewerten
Alt 10.11.2004, 21:13  
Gast
 
Beiträge: n/a
Standard Regex mit mathematischen termen --> Klammerproblem

PHP-Code:
 [code$fun="(5*x)^(2+x)-7";
function 
expo($treffer)
{
    
var_dump($treffer);

    
//return "nochnichtfertig";

    
}

$fun preg_replace_callback("/\((.*?)\)\^\((.*?)\)/""expo"$fun);
echo 
$fun;
?> [/code] 
bei dem codebeispiel wird ja unten "nochnichtfertig-7" ge-echo-t.

so weit so gut.
aber wenn ich jetzt einen term der z.b. (9-x+(5*x)^5)^(x-5*(4-7)+2) lautet, funktioniert der regex nicht richtig.
kann mir jemand helfen, ich benötige dringend hilfe.
schon mal danke im Vorraus!!!

am ende soll natürlich das hoch mit pow() funktionieren
  Mit Zitat antworten
Sponsor Mitteilung
PHP Code Flüsterer

Registriert seit: 21.08.2005
Beiträge: 4682
PHP-Kenntnisse:
Fortgeschritten

Alt 11.11.2004, 09:00  
Erfahrener Benutzer
 
Registriert seit: 19.10.2004
Beiträge: 498
marsch
Standard

Kleine Frage vorweg:
Was ist, wenn gar keine Klammern im Term stehen? Ich denke da an
Code:
x^y
x^n^m
Es gibt in PHP meines Wissens nach den Modifier /g in PHP nicht, so dass die Sache mit RegExen komplizierter wird. Aber warum zerhackst Du Deinen String nicht an "^" und arbeitest ihn dann von rechts nach links ab... nee, blöde Idee, weil Du so die zusammengehörigen Tokens nicht genau rauskriegst.
Vielleicht so:
Code:
<?php

function masquerade ($s) {
    $patterns = array (
            '/\(/', '/\)/', '/\+/', '/\*/', '/\^/',
        );
    $replaces = array (
            '\\(', '\\)', '\\+', '\\*', '\\^',
        );
    return (preg_replace ($patterns, $replaces, $s));
}

$term = '(9-x+(5*x)^5)^(x-5*(4-7)+2)';
while (preg_match ('/((?:[0-9A-Za-z]+|\(.+\))\s*)\^(\s*(?:[0-9A-Za-z]+|\(.+\)))/', $term, $match)) {
    $pattern = sprintf ('#%s\^%s#', masquerade ($match[1]), masquerade ($match[2]));
    $replace = sprintf (' pow (%s, %s) ', $match[1], $match[2]);
    print (sprintf ("Ersetze <%s> durch <%s>...\n", $pattern, $replace));
    $term = preg_replace ($pattern, $replace, $term);
    print (sprintf ("Vorläufig: %s\n", $term));
}
print (sprintf ("%s\n", $term));
?>
Ist noch nicht so elegant, aber vielleicht ein Ansatz. Vielleicht solltest Du aber wirklich einen Ansatz über einen Tokenizer wählen, der Dir diese Arbeit abnimmt...

--

Denke bitte auch an Vereinfachungen:
Satz: Potenzen werden potenziert, indem man die Exponenten multipliziert.

--

Verdammtes php-Tag, warum tut das nicht???
__________________
Cheers, Marco
marsch ist offline   Mit Zitat antworten
Alt 11.11.2004, 14:26  
Gast
 
Beiträge: n/a
Standard

Danke für deine antwort, aber leider verstehe ich den code nicht wirklich. kannst du ihn mir etwas erklären bitte?

hast du den code getestet??

noch was: was ist ein Tokenizer ??
  Mit Zitat antworten
Alt 12.11.2004, 09:14  
Erfahrener Benutzer
 
Registriert seit: 19.10.2004
Beiträge: 498
marsch
Standard

Zitat:
Zitat von Puschkin
Danke für deine antwort, aber leider verstehe ich den code nicht wirklich. kannst du ihn mir etwas erklären bitte?
???
Zitat:
Zitat von Puschkin
hast du den code getestet??
ja, ist nicht so, wie es soll ("pow pow" ist keine korrekte Syntax ), aber ein Ansatz
Zitat:
Zitat von Puschkin
noch was: was ist ein Tokenizer ??
Deine Formel besteht aus einzelnen Bausteinen wie Ziffern, Operatoren oder geklammerte Terme (Tokens), ein Formelparser wird den String erst einmal in diese Bestandteile zerlegen und dann eine für die Programmiersprache richtige Syntax umwandeln. Das ist nicht trivial
__________________
Cheers, Marco
marsch ist offline   Mit Zitat antworten
Antwort


Themen-Optionen
Thema bewerten
Thema bewerten:

Forumregeln
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are an
Gehe zu

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
Array sortieren mit regex Lupi PHP Tipps 2008 3 21.07.2008 15:17
Regex: Auslesen der Meta-Tags einer Webseite Sucheingrenzung pepe24 PHP Tipps 2008 12 31.05.2008 15:41
2 Regex in PHP kompatible Syntax übersetzen NoiZy PHP-Fortgeschrittene 6 07.04.2008 09:04
Regex Link Problem Broadcast PHP Tipps 2008 2 29.02.2008 16:30
Gierig/nicht gieriger Regex Papst PHP Tipps 2008 22 02.12.2007 20:15
[gelöst :D ] regex tuts nur einmal pro zeile notyyy PHP Tipps 2008 17 24.09.2007 15:40
RegEx für Mail-Adresse (Bitte prüfen!) vollkommenegal PHP Tipps 2006 13 20.11.2006 20:02
habe ein paar fragen zu REGEX imported_kremser PHP Tipps 2006 11 31.01.2006 15:30
RegEx findet Stringvorkommen nicht PHP Tipps 2007 6 08.12.2005 21:52
regex Funktion PHP Tipps 2005-2 6 18.06.2005 02:46
RegEx auf starkes passwort und erlaubte zeichen prüfen GothicFiction PHP-Fortgeschrittene 4 10.04.2005 21:10
Lösungsansatz fehlt: RegEx soll eine Funktion "aufrufen Kort PHP Tipps 2005 6 03.04.2005 18:15
Anker Links parsen (RegEx) Spyker PHP Tipps 2005 1 31.01.2005 12:01
Regex für attribute in quelltexten robo47 PHP Tipps 2005 6 27.01.2005 18:29
Dringend: RegEx zur bearbeitung vom Dateipfaden... PHP Tipps 2005 5 12.01.2005 10:59

Besucher kamen über folgende Suchanfragen bei Google auf diese Seite
php formelparser, regex multiplikation, regex mathe, regex mathe funktionen, formelparser php, formelparser, reguläre ausdrücke formelparser, regex mathematischer term, regular expression mathematik term, javascript formelparser, mathematische klammer php, regex multiplizieren, regexp math power, php klammer mathematisch, php regex mathematische formel, preg_replace multiplizieren, php term parsen, regex exponenten php, regexp \^\ to pow(), java regulärer ausdruck multiplikation

Alle Zeitangaben in WEZ +2. Es ist jetzt 19:52 Uhr.




Powered by vBulletin® Version 3.7.2 (Deutsch)
Copyright ©2000 - 2012, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.2.0
Aprilia-Forum, Aquaristik-Forum, Liebeskummer-Forum, Zierfisch-Forum, Geizkragen-Forum

Creative Commons License
Dieser Inhalt ist unter einer Creative Commons-Lizenz lizenziert.