Ankündigung

Einklappen
Keine Ankündigung bisher.

Schließende Klammer finden mit Regex

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Schließende Klammer finden mit Regex

    Hallihallo, hab mich hier schon lange nicht mehr gemeldet,

    aber jetzt zum Problem, ich arbeite an einer ScriptEngine und sitze grade an den ifs...

    Immoment sieht der If Regex so aus:

    Code:
    ~(?:(if\((.*)\)\{(.*)\})|(elseif\((.*)\)\{(.*)\})|(else\{(.*)\})|(.*)\;)~isU
    Hier prüfe ich einfach ob es ein if, elseif , else oder nichts von dem Vorkommt, das geht soweit auch alles, nur wenn ich if's schachteln will treten fehler auf:

    Beispiel:

    if(a<b){
    if(a<c){
    write "am kleinsten";
    }
    }

    Normal müsste ja die äusere klammer zu dem äuseren If gehören, ich habe das mal farbig gemacht...

    er macht aber

    if(a<b){
    if(a<c){
    write "am kleinsten";
    }
    }

    wie ihr sehen könnt nimmt der die erst beste möglichkeit die klammer zu schließen, das ist logischerweiße falsch, ich erhalte jetzt ein halbes if in einem if und eine verwaiste klammer...

    was kann ich da tun?

    MfG Desmu

  • #2
    AW: Schließende Klammer finden mit Regex

    du bist an den grenzen von regexen. diese sind nicht dafür geeignet um parser zu schreiben, du musst dir einen richtigen parser schreiben der die eingabe zeichen für zeichen durchgeht (so macht regex das übrigens auch, nicht das du denkst, regex wäre etwas "magisches").

    da du aber sowieso nur einen solchen quatsch wie smarty machen willst, du aber den php syntax benutzt, würde ich dir nahe legen entweder gleich mit require zu arbeiten oder, falls eine filterung des codes erwünscht ist dies dem Zend lexical scanner über die PHP Tokenizer funktionen zu machen.

    gruß
    Zuletzt geändert von Brian; 01.12.2007, 13:52.
    AC/DC Fanpage www.ifyouwantblood.de
    Nein zur Zensur im Internet und anderswo - Anonymous

    Kommentar


    • #3
      AW: Schließende Klammer finden mit Regex

      ich habe auch schon daran gedacht zeichen für zeichen einzulesen...
      ich werds mal ausprobieren!

      und dir syntax... das war jetzt nur ein beispiel^^
      bzw ein testversuch

      aber trozdem danke für deine hilfe

      Kommentar


      • #4
        AW: Schließende Klammer finden mit Regex

        Zitat von Desmulator Beitrag anzeigen
        ich habe auch schon daran gedacht zeichen für zeichen einzulesen...
        ich werds mal ausprobieren!

        und dir syntax... das war jetzt nur ein beispiel^^
        bzw ein testversuch

        aber trozdem danke für deine hilfe
        dann möchte ich dein beispiel mal erweitern:

        PHP-Code:
        if($a>$b)
        {
             if(
        $b===1)
             {
                 echo 
        1;

        mir regexen bist du hier am ende....
        AC/DC Fanpage www.ifyouwantblood.de
        Nein zur Zensur im Internet und anderswo - Anonymous

        Kommentar


        • #5
          AW: Schließende Klammer finden mit Regex

          Hi,
          Zitat von Desmulator Beitrag anzeigen
          ich habe auch schon daran gedacht zeichen für zeichen einzulesen...
          das brauchst Du eigentlich gar nicht, wenn Du die passenden Stringfunktionen verwendest.
          Über substr_count() kannst Du ermitteln, ob die Anzahl der öffnenden Klammern mit denen der schließenden übereinstimmt.
          Über strpos() und strrpos() kannst Du dann de jeweils zusammengehörigen Klammerpositionen ermitteln und den substr() dazwischen weiter durchsuchen.

          Gruß
          Ingo
          Ingo Webdesign

          Kommentar


          • #6
            AW: Schließende Klammer finden mit Regex

            @ingo: das wäre dan mein dritter versuch geworden, ich glaube aber, ich mache es direkt so, da es wie du sagtest viel einfach geht...

            Kommentar


            • #7
              AW: Schließende Klammer finden mit Regex

              Zitat von Ingo Beitrag anzeigen
              Hi,

              das brauchst Du eigentlich gar nicht, wenn Du die passenden Stringfunktionen verwendest.
              Über substr_count() kannst Du ermitteln, ob die Anzahl der öffnenden Klammern mit denen der schließenden übereinstimmt.
              Über strpos() und strrpos() kannst Du dann de jeweils zusammengehörigen Klammerpositionen ermitteln und den substr() dazwischen weiter durchsuchen.

              Gruß
              Ingo
              besser ohne substr_count() sonst gehst du das ganze ja 3 mal durch....
              AC/DC Fanpage www.ifyouwantblood.de
              Nein zur Zensur im Internet und anderswo - Anonymous

              Kommentar


              • #8
                AW: Schließende Klammer finden mit Regex

                Hi,
                Zitat von Brian Beitrag anzeigen
                besser ohne substr_count() sonst gehst du das ganze ja 3 mal durch....
                ich meinte einmal am Anfang prüfen, ob die Klammern überhaupt korrekt sind - weil sonst nach dieser Methode keine sinnvolle Auswertung erfolgen kann.

                Gruß
                Ingo
                Ingo Webdesign

                Kommentar


                • #9
                  AW: Schließende Klammer finden mit Regex

                  Zitat von Ingo Beitrag anzeigen
                  Hi,

                  ich meinte einmal am Anfang prüfen, ob die Klammern überhaupt korrekt sind
                  auch substr_count() muss über den ganzen text drüber und jedes zeichen prüfen....

                  Zitat von Ingo Beitrag anzeigen
                  - weil sonst nach dieser Methode keine sinnvolle Auswertung erfolgen kann.

                  Gruß
                  Ingo
                  natürlich geht das, du musst dir nur speichern, wo welche klammer bereits gefunden wurde und dies mit deinen neuen ergebnissen vergleichen....
                  AC/DC Fanpage www.ifyouwantblood.de
                  Nein zur Zensur im Internet und anderswo - Anonymous

                  Kommentar


                  • #10
                    AW: Schließende Klammer finden mit Regex

                    Hi,
                    Zitat von Brian Beitrag anzeigen
                    auch substr_count() muss über den ganzen text drüber und jedes zeichen prüfen....
                    ja und? das geht ratzfatz.

                    Zitat von Brian Beitrag anzeigen
                    du musst dir nur speichern, wo welche klammer bereits gefunden wurde und dies mit deinen neuen ergebnissen vergleichen....
                    Wenn de Anzahl der öffnenden und schließenden Klammern unterschiedlich ist, dann ist zwangsläufig das Äquivalent der ersten öffnenden Klammer eben nicht die letzte schließende Klammer.

                    Gruß
                    Ingo
                    Ingo Webdesign

                    Kommentar


                    • #11
                      AW: Schließende Klammer finden mit Regex

                      Zitat von Ingo Beitrag anzeigen
                      Hi,

                      ja und? das geht ratzfatz.
                      ohne gehts noch ratzfatzer

                      Wenn de Anzahl der öffnenden und schließenden Klammern unterschiedlich ist, dann ist zwangsläufig das Äquivalent der ersten öffnenden Klammer eben nicht die letzte schließende Klammer.
                      natürlich nicht, aber, wie du sicherlich weißt, ist ein fehler . speicherst du dir dir die letzten positionen bzw. gibt dir strrpos FALSE ab der position zurück, weißt du das was falsch ist (Unexpected end )

                      edit: heute gebe ich besser keine antwort mehr, fußball + BVB sieg = bier....
                      Zuletzt geändert von Brian; 01.12.2007, 19:12.
                      AC/DC Fanpage www.ifyouwantblood.de
                      Nein zur Zensur im Internet und anderswo - Anonymous

                      Kommentar


                      • #12
                        AW: Schließende Klammer finden mit Regex

                        Hi,
                        Zitat von Brian Beitrag anzeigen
                        gibt dir strrpos FALSE ab der position zurück, weißt du das was falsch ist
                        wenn eine fehlt, ja. Aber ob eine überzählig ist, müsste dann am Ende extra noch geprüft werden. Gut, das ginge unmerklich schneller als ein Test am Anfang, aber ich würde den doch lieber erst mal machen.

                        Gruß
                        Ingo
                        Ingo Webdesign

                        Kommentar

                        homepage-forum.de - Hilfe für Webmaster! Statistiken

                        Einklappen

                        Themen: 57.203   Beiträge: 432.325   Mitglieder: 29.596   Aktive Mitglieder: 49
                        Willkommen an unser neuestes Mitglied, BillyTig.

                        Online-Benutzer

                        Einklappen

                        650 Benutzer sind jetzt online. Registrierte Benutzer: 4, Gäste: 646.

                        Mit 4.707 Benutzern waren am 12.01.2023 um 03:07 die meisten Benutzer gleichzeitig online.

                        Die neuesten Themen

                        Einklappen

                        • bodan
                          Bard - Googles Antwort auf ChatGPT geht ins Rennen
                          Try Bard and share your feedback Mar 21, 2023 - so der Aufruf vor wenigen Stunden.

                          und weiter: We’re starting to open access to Bard, an early experiment that lets you collaborate with generative AI. We're beginning with the U.S. and the U.K., and will expand to more countries and languages...
                          22.03.2023, 23:20
                        • daggel
                          Eine horizontale Linie mit <hr> in css als bild mit wiederholung anzeigen?
                          Hallo,

                          ich bin neu hier und Webseiten-Anfänger. Trotzdem möchte ich in einem HR-Tag mit Css ein Bild anzeigen, dass nur horizontal über die gesamte Seite wiederholt wird.
                          HTML-Code:
                            <!--<div id="bild2">      
                          <img src="..\Bilder\TrennungTranparentQuer.jpeg">
                          ...
                          22.03.2023, 15:44
                        • bodan
                          CloudFest Hackathon 2023 noch bis 23 März- mit innovativen Projekten
                          Hi liebe Homepage-Foren-Feunde,


                          hier ein kurzer Hinweis auf das CloudFest 2023

                          wie immer gibts eine Fülle von Angeboten am Fest. Da ist ganz ganz viel dabei!
                          ...unter anderem auch mit innovativen WordPress-Projekten: VS Code-Erweiterung für In-Browser-Entwicklung...
                          21.03.2023, 12:41
                        • PatX
                          Design Hilfe zu einer Form die ein PHP Script triggert
                          Ich würde mich über eure Meinung zu dem folgenden Szenario freuen:

                          Ich möchte ein Formular einrichten, das im Wesentlichen die folgenden Schritte triggert:
                          - Ein PHP-Skript ausführen
                          - Formulardaten in die WordPress-Datenbank meiner Website speichern
                          - KEINE anderen...
                          21.03.2023, 07:20
                        • Reservespieler
                          Website pflegen
                          Ein freundliches Hallo an alle,
                          Ich würde gerne von meinem Verein die Pflege der Website übernehmen da es auch einige Vorteile als aktives Mitglied hat. Das Problem ist nur das ich überhaupt keine Ahnung davon habe.
                          Daher hier meine Frage:
                          Wie funktioniert sowas und was muss ich...
                          18.03.2023, 16:48

                        Die neuesten Beiträge

                        Einklappen

                        Lädt...
                        X