Ankündigung

Einklappen
Keine Ankündigung bisher.

Regex - bestimmtes Muster erkennen

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

  • Regex - bestimmtes Muster erkennen

    Hallo,

    ich versuche schon seit einiger Zeit einen regulären Ausdruck zu schreiben, der Algorithmen für den Zauberwürfel erkennt. So ein Algorithmus kann z.B. so aussehen:
    F U B2 R' L' D (Die Buchstaben F, B, U, D, R oder L mit einem ', einer 2 oder garnichts)
    Mein Ausdruck sollte quasi so aussehen:

    (Leerzeichen, Zeilenumbruch o.ä.)
    ( (F,B,U,D,R oder L) (',2 oder garnix) (eventuell Leerzeichen) ) {3 mal oder öfters}
    (Leerzeichen, Zeilenumbruch o.ä.)

    sieht so aus, funktioniert aber nicht:
    Code:
    #(\s|\r\n?|\n?)(((F|B|R|L|U|D)('|2){0,1}(\s){0,1}){3,})(\s|\r\n?|\n?)#
    Code:
    <a href=\"http://alg.garron.us/?alg=$2&animtype=solve\" target=\"_blank\">$2</a>
    Aber leider scheint der Code nur in eine Dauerschleife zu führen.

    Hoffentlich könnt ihr mir helfen!

    MFG, Felk


    EDIT: Hab vergessen zu erwähnen, wo die Dauerschleife wahrscheinlich entsteht, hier einfach mal der ganze Code-Snippet (das wichtige ist rot):
    Code:
      $pattern = array(
                       "#\[alg=([2-7]{1})\](.*?)\[\/alg\]#si",
                       "#\[alg\](.*?)\[\/alg\]#si",
                       "#(\s|\r\n?|\n?)(((F|B|R|L|U|D)('|2){0,1}(\s){0,1}){3,})(\s|\r\n?|\n?)#"
                       );
    
      $replace = array(
                       "<a href=\"http://alg.garron.us/?alg=$2&animtype=solve&cube=$1x$1x$1\" target=\"_blank\">$2</a>",
                       "<a href=\"http://alg.garron.us/?alg=$1&animtype=solve\" target=\"_blank\">$1</a>",
                       "<a href=\"http://alg.garron.us/?alg=$2&animtype=solve\" target=\"_blank\">$2</a>"
                       );
    
    
    	while(preg_match($pattern[0], $message) or preg_match($pattern[1], $message) or preg_match($pattern[2], $message)) // Dauerschleife hier?
    	{
    		$message = preg_replace($pattern, $replace, $message);
    	}
    [URL="http://www.speedcube.de"]www.Speedcube.de[/URL], werde Speedcubing Meister! (Rubik's Cube lösen)


  • #2
    Aber leider scheint der Code nur in eine Dauerschleife zu führen.
    Wer wo was?
    --

    „Emoticons machen einen Beitrag etwas freundlicher. Deine wirken zwar fachlich richtig sein, aber meist ziemlich uninteressant.
    Wenn man nur Text sieht, haben viele junge Entwickler keine interesse, diese stumpfen Texte zu lesen.“


    --

    Kommentar


    • #3
      Sorry, hab meinen Fehler eingesehen. Habe wichtige Codeteile vergessen, deshalb ist der Beitrag nun editiert
      [URL="http://www.speedcube.de"]www.Speedcube.de[/URL], werde Speedcubing Meister! (Rubik's Cube lösen)

      Kommentar


      • #4
        Ohne mir die Pattern näher angesehen zu haben: Was ist denn das für eine seltsame Konstruktion mit while, zwei preg_match und preg_replace? Ich würde erstmal versuchen, das in einem Abwasch mit preg_replace zu erledigen. Da die while-Schleife irgendwie überhaupt keinen Sinn macht und du preg_replace eigentlich schon korrekt anwendest, reicht es vielleicht auch einfach, die Schleife wegzulassen.
        @fschmengler - @fschmengler - @schmengler
        PHP Blog - Magento Entwicklung - CSS Ribbon Generator

        Kommentar


        • #5
          Könntest du ein Beispiel posten, was du als Eingabe hast und was du als Ausgabe erwartest? Das kommt mir so alles etwas spanisch vor.
          PHP-Wissenssammlung Composer Awesome Awesomeness PHP: The Right Way @mermshaus

          Kommentar


          • #6
            @fab: Ich muss zugeben, das hatte ich so vorgegeben. Ich hab einfach ein Plugin für MyBB umgeschrieben. Anscheinend wollte der Autor damit alle BB-Tags ersetzen und nicht nur eines. Ich hab ihm einfach mal geglaubt.

            @mermshaus: Ich habe garkeine Ausgabe, weil die Seite einfach nur lädt. Wenn ich, wie es fab vorgeschlagen habe, das preg_replace nur 1x ausführe, bekomme ich das:
            Code:
            Hallo
            [alg]F R U R' U' F'[/alg]
            Test 4x4:
            [alg=4]f R U' l b B'[/alg]
            
            Und:
            F R U R' U' F'
            wird zu:
            Code:
            Hallo<br />
            <a href="http://alg.garron.us/?alg=<a href="http://alg.garron.us/?alg=F R U R' U' F'&animtype=solve" target="_blank">F R U R' U' F'</a>&animtype=solve" target="_blank"><a href="http://alg.garron.us/?alg=F R U R' U' F'&animtype=solve" target="_blank">F R U R' U' F'</a></a><br />
            
            Test 4x4:<br />
            <a href="http://alg.garron.us/?alg=f R U' l b B'&animtype=solve&cube=4x4x4" target="_blank">f R U' l b B'</a><br />
            <br />
            Und:<a href="http://alg.garron.us/?alg=F R U R' U' F'&animtype=solve" target="_blank">F R U R' U' F'</a>


            Also erkennt er es, zerschiesst aber irgendwie den restlichen Code

            EDIT: Aha, anscheinend beachtet er die verpflichtenden whitespaces nicht O_o
            [URL="http://www.speedcube.de"]www.Speedcube.de[/URL], werde Speedcubing Meister! (Rubik's Cube lösen)

            Kommentar


            • #7
              und was du als Ausgabe erwartest
              --

              „Emoticons machen einen Beitrag etwas freundlicher. Deine wirken zwar fachlich richtig sein, aber meist ziemlich uninteressant.
              Wenn man nur Text sieht, haben viele junge Entwickler keine interesse, diese stumpfen Texte zu lesen.“


              --

              Kommentar


              • #8
                Ah okay, T'schuldigung.

                Sowas wie:
                Code:
                <a href="http://alg.garron.us/?alg=F R U R' U' F&animtype=solve" target="_blank">F R U R' U' F'</a><br />
                Das ganze soll halt dafür sorgen, dass man keinen [alg]-Tag braucht, sondern dass Algorithmen automatisch verlinkt werden
                [URL="http://www.speedcube.de"]www.Speedcube.de[/URL], werde Speedcubing Meister! (Rubik's Cube lösen)

                Kommentar


                • #9
                  der Algorithmen für den Zauberwürfel erkennt
                  Ich hielte ja ein einfaches Attribut für wesentlich sinnvoller.

                  Code:
                  [alg type="rubik"]Bl;a bla [/alg]
                  Wenn ich jetzt F' U schreibe, muss nicht zwingend ein Würfelcode gemeint sein
                  --

                  „Emoticons machen einen Beitrag etwas freundlicher. Deine wirken zwar fachlich richtig sein, aber meist ziemlich uninteressant.
                  Wenn man nur Text sieht, haben viele junge Entwickler keine interesse, diese stumpfen Texte zu lesen.“


                  --

                  Kommentar


                  • #10
                    Was? Es sollen doch Algorithmen ohne jeglichen BB-Code erkannt werden.
                    Ebenso wie dieser Link klickbar sein wird, ohne dass ich ihn selbst verlinkt habe: www.example.com

                    Und BB-Code Attribute sind mir zu kompliziert, da müsste ich mich erst mit XML-Parsern auseinandersetzen. Mir reicht ja das eine Attribut im Tag selbst.

                    EDIT: In einem Würfelforum ist es aber sehr wahrscheinlich, dass bei F U U ein Algorithmus gemeint ist
                    [URL="http://www.speedcube.de"]www.Speedcube.de[/URL], werde Speedcubing Meister! (Rubik's Cube lösen)

                    Kommentar


                    • #11
                      Die richtige Antwort wäre F' U2 gewesen
                      --

                      „Emoticons machen einen Beitrag etwas freundlicher. Deine wirken zwar fachlich richtig sein, aber meist ziemlich uninteressant.
                      Wenn man nur Text sieht, haben viele junge Entwickler keine interesse, diese stumpfen Texte zu lesen.“


                      --

                      Kommentar


                      • #12
                        So wie es hier wahrscheinlich ist, dass PR den Page Rank re​präsentiert?

                        Kannst du mal bitte herausstellen, wo sich deine Ausgabe von der erwarteten unterscheidet? Ich erkenne es nicht...
                        @fschmengler - @fschmengler - @schmengler
                        PHP Blog - Magento Entwicklung - CSS Ribbon Generator

                        Kommentar


                        • #13
                          @nikosch: Anspielung auf
                          Ich weiß, dass es F U2 heißen würde, ich bin ja kein Anfänger mehr

                          @fab: Der Algorithmus wird richtig erkannt, allerdings werden anscheinend die whitespaces ignoriert, die am anfang und am Ende sein sollen, weshalb die Algorithmen in den bereits geparsten [alg]-Tags einfach nochmal geparsed werden
                          Sieht man daran, dass im href-Tag auf einmal ein neues <a> aufgeht.
                          [URL="http://www.speedcube.de"]www.Speedcube.de[/URL], werde Speedcubing Meister! (Rubik's Cube lösen)

                          Kommentar


                          • #14
                            wird zu:
                            Code:

                            Hallo<br />
                            <a href="http://alg.garron.us/?alg=<a href="http://alg.garron.us/?alg=F R U R' U' F'&animtype=solve" target="_blank">F R U R' U' F'</a>&animtype=solve" target="_blank"><a href="http://alg.garron.us/?alg=F R U R' U' F'&animtype=solve" target="_blank">F R U R' U' F'</a></a><br />
                            Kein Wunder bei einer While Schleife und dem Ursprungscode im Result.
                            --

                            „Emoticons machen einen Beitrag etwas freundlicher. Deine wirken zwar fachlich richtig sein, aber meist ziemlich uninteressant.
                            Wenn man nur Text sieht, haben viele junge Entwickler keine interesse, diese stumpfen Texte zu lesen.“


                            --

                            Kommentar


                            • #15
                              (\s|\r\n?|\n?)
                              == ODER vielleicht ein Zeichen.
                              --

                              „Emoticons machen einen Beitrag etwas freundlicher. Deine wirken zwar fachlich richtig sein, aber meist ziemlich uninteressant.
                              Wenn man nur Text sieht, haben viele junge Entwickler keine interesse, diese stumpfen Texte zu lesen.“


                              --

                              Kommentar

                              Lädt...
                              X