regexp


  • Mod

    Hallo Leute.

    Kann mir mal jemand mit Regular Expressions helfen?

    folgendes:
    ich bekomme einen input string, zB

    "Hallo Hubert!
    Sie haben <%stueck%> <%if.stueck(1)%>Stück<%endif.stueck%>Stücke bestellt."

    Ich muss nun <%stueck%> in $values['stueck'] verwandeln. Das ist kein Problem.

    allerdings muss ich auch
    <%if.stueck(1)%>
    in
    if($values['stueck']==1)
    umwandeln.

    allerdings ist
    <%if.stueck%> gleich zu behandeln wie ein <%if.stueck(0)%> 😞

    ich hoffe es ist klar was ich meine 🙂

    mein Ansatz war:

    //$r == die variables also zB 'stueck'
    //$str == der string den es zu parsen gilt
    //$vars == ist ein array welches variablen + wert beinhaltet
    
    //line: 11
    preg_match("/^<%if\.".$r."(*?)%>(.*?)<%endif\.".$r."%>/",$str,$matches);
    //ermittle alle <%if.stueck%> und die werte fuer die 
    //kondition und das zwischen if und endif
    
    if($matches[1]) //wenn es eine kondition gibt
    {
        $exp=substr($matches[1],1,strlen($matches[1])-2);
        $match=$matches[1];
    //auswerten
    }
    else //wenn es keine kondition gibt, dann ist expression==0
    {
        $exp=0;
        $match="";
    }
    if($vars[$r]==$exp) //wenn der wert von der variable gleich dem gesuchten ist
    {
        $to_rep=$matches[2]; //schreibe den text
    }
    else
    {
        $to_rep=""; //andernfalls lösche alles
    }
    $str=str_replace("<%if.".$r.$match."%>".$matches[2]."<%endif.$r%>",$to_rep,$str);
    //replace alles
    

    ALs fehlermeldung bekomme ich:

    Warning: Compilation failed: nothing to repeat at offset 9 in C:\server\www\www\test.php on line 11
    Notice: Undefined offset: 1 in C:\server\www\www\test.php on line 15
    Notice: Undefined offset: 2 in C:\server\www\www\test.php on line 28
    Notice: Undefined offset: 2 in C:\server\www\www\test.php on line 34

    Zeile 11 ist das preg_match und die anderer warnungen beziehen sich auf die verwendung von $matches[]

    ich verstehe die warnung absolut nicht 😞 und google weiss auch nichts sinnvolles darüber zu berichten 😞



  • [cpp]preg_match("/^<%if\.".r."(**.***?)%>(.*?)<%endif\\.".r."%>/",str,str,matches);[/cpp]

    glaube ich mal. Um zu unterscheiden, ob da etwas sein muss oder nicht (kann immer), musst du .*? (nicht oder etwas) und .+? (auf alle Fälle etwas, nur nicht genau, wie lang).

    [edit] Ups einen fetten Punkt sieht man gar nicht. Also: Ich habe noch ein Punkt hinzugefügt.

    [ Dieser Beitrag wurde am 26.02.2003 um 10:25 Uhr von Loggy editiert. ]


  • Mod

    danke, jetzt ist die fehlermeldung weg, aber die 3 notices sind immer noch da 😕

    dh er findet keine treffer... nur warum?
    zum parsen habe ich ihm diesen string gegeben
    "Hallo<%if.y(5)%>y==5<%endif.y%>"



  • lass mal das ^ weg, sonst muss das Zeugs ja ganz vorne im String stehen 😉



  • Solltest du sowieso zuvor prüfen, ob etwas drin ist und wenn nicht mit einem Standard Wert belegen oder eine eigene Fehlerroutine starten. Nicht, dass der Benutzer irgendwann diese blöden PHP Fehler zu Gesicht bekommt.


  • Mod

    thx es geht!!

    danke!!!

    kennt ihr ne seite wo man solche regexp sachen nachschlagen kann?



  • Elise hat dazu mal folgenden Link gepostet: http://www.weigl.de/seminar/php4/zeichen_regex.htm


Anmelden zum Antworten