Reguläre Ausdrücke

  • geschlossen

  • Snip3r
  • 1304 Aufrufe 6 Antworten

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • Reguläre Ausdrücke

    Hallo Leute,

    bräuchte mal eure Hilfe bei ner kleinen Template Funktion.

    HTML-Quellcode

    1. <div class="test">
    2. <if check="$class->var == false">
    3. false
    4. <else>
    5. true
    6. </if>
    7. </div>
    So würde ich das Template gerne nutzen.
    Dazu hab ich in einer Funktion, diesen Code genommen, den ich aber gerne um das check="" erweitern würde.

    PHP-Quellcode

    1. function template($file)
    2. {
    3. $f = file_get_contents($file);
    4. $f = str_replace('"','\"',$f);
    5. while(preg_match('/<if[ \t]*(.*)>(.*)(<\/if>|<else>(.*)<\/if>)/Uis', $f))
    6. {
    7. $f = preg_replace('/<if[ \t]*(.*)>(.*)(<\/if>|<else>(.*)<\/if>)/Uis', '".( ($1) ? ("$2") : ("$4") )."', $f);
    8. }
    9. return $f;
    10. }

    Funktionieren würde damit: <if $var == false>false</if>

    Ich vermute das liegt an der Klasse auf die ich oben zugreife ($class->var), da > gleichzeitig das Ende der if-Bedingung darstellt.

    Kenne mich mit Reg. Ausdrücken nicht besonders aus.
    Versucht hab ich schon folgendes, was aber nicht funktionierte:

    PHP-Quellcode

    1. while(preg_match('/<if[ \t]check="*(.*)">(.*)(<\/if>|<else>(.*)<\/if>)/Uis', $f))
    2. {
    3. $f = preg_replace('/<if[ \t]check="*(.*)">(.*)(<\/if>|<else>(.*)<\/if>)/Uis', '".( ($1) ? ("$2") : ("$4") )."', $f);
    4. }


    gruß
    snip3r
    Rechteübersicht * Forenregeln * F.A.Q. * Lexikon
    Suchfunktion * Chat * User helfen User
    Patrioten reden nur davon, dass sie für ihr Land sterben, niemals davon, dass sie für ihr Land töten. (Bertrand Russell)

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von Snip3r ()

  • Hi,
    habe jetzt nicht bei dir nach Fehlern gesucht, sondern das einfach schnell mal selbst gelöst :P

    Mein Bsp.

    PHP-Quellcode

    1. <?php
    2. error_reporting(E_ALL);
    3. header('Content-type:text/plain');
    4. echo $f = '<div class="test">
    5. <if check="$class->var == false">
    6. false
    7. </if><else>
    8. true
    9. </else>
    10. </div> <div class="test">
    11. <if check="$class->var == false">
    12. false
    13. </if>
    14. </div> ';
    15. echo preg_replace('!<if check="(.*)">(.*?)</if>(<else>(.*?)</else>)?!is','".(($1)?"$2":"$4")."',$f);
    16. ?>
    Alles anzeigen


    Gruß
    Broken Sword
    Auf dem Abstellgleis sah man ihn liegen,
    Auf dem Abstellgleis zwischen Schwelle und Gestein,
    Auf dem Abstellgleis im strömenden Regen,
    Auf dem Abstellgleis allein.
  • Hey Kollege,
    danke für deine Antwort.
    Hab jetzt (zum testen) einfach deinen Code in ne PHP Datei kopiert, ausgeführt und erhalte folgende Quelltext Ausgabe im Browser. Das echo von $f hab ich entfernt und die Header Angabe auskommentiert.

    HTML-Quellcode

    1. <div class="test">
    2. ".(($class->var == false">
    3. false
    4. </if><else>
    5. true
    6. </else>
    7. </div> <div class="test">
    8. <if check="$class->var == false)?"
    9. false
    10. ":"")."
    11. </div>
    Alles anzeigen

    Normal sollte doch eine Fehlermeldung kommen, oder?

    // Erweitere ich das preg_replace um ein \$ sieht der Quelltext so aus:

    HTML-Quellcode

    1. <div class="test">
    2. <if check="$class->var == false">
    3. false
    4. </if><else>
    5. true
    6. </else>
    7. </div> <div class="test">
    8. <if check="$class->var == false">
    9. false
    10. </if>
    11. </div>
    Alles anzeigen

    preg_replace:

    PHP-Quellcode

    1. echo preg_replace('!<if check="(.\$*)">(.*?)</if>(<else>(.*?)</else>)?!is','".(($1)?"$2":"$4")."',$f);
    Rechteübersicht * Forenregeln * F.A.Q. * Lexikon
    Suchfunktion * Chat * User helfen User
    Patrioten reden nur davon, dass sie für ihr Land sterben, niemals davon, dass sie für ihr Land töten. (Bertrand Russell)

    Dieser Beitrag wurde bereits 3 mal editiert, zuletzt von Snip3r ()

  • Funtzt alles einwandfrei oO"

    PHP-Quellcode

    1. <?php
    2. error_reporting(E_ALL);
    3. header('Content-type:text/plain');
    4. echo $f = '<div class="test">
    5. <if check="$class->var == false">
    6. false
    7. </if><else>
    8. true
    9. </else>
    10. </div> <div class="test">
    11. <if check="$class->var == false">
    12. false
    13. </if>
    14. </div> ';
    15. echo preg_replace('!<if check="(.*?)">(.*?)</if>(<else>(.*?)</else>)?!is','".(($1)?"$2":"$4").',$f);
    16. ?>
    Alles anzeigen
    Auf dem Abstellgleis sah man ihn liegen,
    Auf dem Abstellgleis zwischen Schwelle und Gestein,
    Auf dem Abstellgleis im strömenden Regen,
    Auf dem Abstellgleis allein.

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von Broken Sword ()

  • Hab die Funktion etwas angepasst.
    Und zum Testen einfach mal folgende Variable definiert ($blub = true;)

    Template:

    HTML-Quellcode

    1. <div class="test">
    2. <if check="$blub == false">
    3. false
    4. <else>
    5. true
    6. </if>
    7. </div>

    Ausgabe im Browser:
    false true
    Quelltext:

    HTML-Quellcode

    1. <div class="test">
    2. <if check="1 == false">
    3. false
    4. <else>
    5. true
    6. </if>
    7. </div>
    Sollte eigentlich auf else anspringen und nicht auf beides ;)

    Die leicht angepasste while Schleife:

    PHP-Quellcode

    1. while(preg_match('!<if check="(.*?)">(.*)(<\/if>|<else>(.*)<\/if>)!Uis', $f))
    2. {
    3. $f = preg_replace('!<if check="(.*?)">(.*)(<\/if>|<else>(.*)<\/if>)!Uis', '".( ($1) ? ("$2") : ("$4") )."', $f);
    4. }
    Rechteübersicht * Forenregeln * F.A.Q. * Lexikon
    Suchfunktion * Chat * User helfen User
    Patrioten reden nur davon, dass sie für ihr Land sterben, niemals davon, dass sie für ihr Land töten. (Bertrand Russell)
  • So, habe mir das mal angekuckt, wie du das machst und so.
    Also erstmal ist Ungreedy keine gute Idee - teilweise schon, deshalb auch ".*?" (Punkt+Sternchen+Fragezeichen = ungreedy Wildcard)

    Insgesamt schaut <if><else></if> so bei mir aus:
    stuff.frostbitten.de/sniper.php
    stuff.frostbitten.de/sniper.phps

    Funtzt - Snip3r glücklich :D
    Auf dem Abstellgleis sah man ihn liegen,
    Auf dem Abstellgleis zwischen Schwelle und Gestein,
    Auf dem Abstellgleis im strömenden Regen,
    Auf dem Abstellgleis allein.

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von Broken Sword ()

  • Danke Broken Sword.
    Werd's gleich mal testen...

    Es funktioniert. :danke: :danke:

    Ich mach dann mal zu :P
    => Closed
    Rechteübersicht * Forenregeln * F.A.Q. * Lexikon
    Suchfunktion * Chat * User helfen User
    Patrioten reden nur davon, dass sie für ihr Land sterben, niemals davon, dass sie für ihr Land töten. (Bertrand Russell)

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von Snip3r ()