[REGEX] bestimmte zeichenkette auslesen

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

  • [REGEX] bestimmte zeichenkette auslesen

    Hallo =)

    Ich verzweifle, bitte erbarme sich jmd. mir zu helfen! Aus einem Textfeld kommen die Daten in Form: [bla:foo]. Und auf jeder Zeile ein weiteres [foo:bla]..

    Soo jetzt würde ich gerne ein Array erstellen ala "bla" -> "foo"..
    aber ich scheiter schon am regex, ich verstehe einfach nicht warum es nicht geht:

    PHP-Code:
    preg_match('/\[(.*)\:/im'$_POST['textarea'], $a); 
    Das müsste doch jetzt eigentlich nach allem suchen was von "[" und ":" eingeschlossen ist und es dann in $a schreiben..

    vielen dank schonmal!

  • #2
    mit [ werden normalerweise charakterklassen definiert. also musst du die escapen.
    Code:
    preg_match('/\[(.*):/im', $_POST['textarea'], $a);
    peter
    Nukular, das Wort ist N-u-k-u-l-a-r (Homer Simpson)
    Meine Seite

    Kommentar


    • #3
      Original geschrieben von Kropff
      mit [ werden normalerweise charakterklassen definiert. also musst du die escapen.
      Danke für die schnelle Antwort! Die eckigen Klammern sind bei mir escaped, hat wohl das Forum rausgehauen - die Slashes:

      PHP-Code:
      preg_match('/\\[(.*)\:/im'$_POST['textarea'], $a); 
      funkt leider nicht

      Herauskommt (bei [bar:foo]):
      Code:
      Array ( 
      [0] => [bar: 
      [1] => bar )

      Kommentar


      • #4
        funzt wunderbar. das ist genau das, was dein regexp bezweckt. zum thema klammern solltest du ggf. das hier lesen.

        peter
        Nukular, das Wort ist N-u-k-u-l-a-r (Homer Simpson)
        Meine Seite

        Kommentar


        • #5
          Vielen Dank! Hab bei Dir auf der Seite schon viel gelernt, dafür auch gleich noch ein Danke =)

          Ich versuche nun die ganze Schoße als asso. Array abzuspeichern:
          PHP-Code:
          preg_match_all('#\\[(.+):#Umi'$_POST['sonstinfo'], $key);
          preg_match_all('#\:\(.+)\\]#Umi'$_POST['sonstinfo'], $value);
                      
          foreach (
          $key[1] as $a => $b)
          {
                foreach (
          $value[1] as $c => $d)
                {
                     
          $bla[$b] = $d;
                }

          Wenn ich im Textfeld [bar:foo][test:lol] stehen habe kommt leider folgendes raus:
          Code:
          Array ( 
                     [bar] => lol 
                     [test] => lol 
                    )
          Irgendwie klappt das mit dem 2. foreach nicht =( Hat jmd. ne Idee?
          Zuletzt geändert von roNn; 26.11.2008, 13:38.

          Kommentar


          • #6
            Code:
            preg_match_all('#\[(.+): (.+)\]#Umi', $_POST['sonstinfo'], $hit, PREG_SET_ORDER);
            (musste zwischen ": (" leerzeichen setzen, da sonst ein smile auftaucht)

            schau dir das mal an. da sparst du dir eine schleife. [0] ist der gesamtausdruck, [1] dein key und [2] dein value.

            peter
            Zuletzt geändert von Kropff; 26.11.2008, 13:50.
            Nukular, das Wort ist N-u-k-u-l-a-r (Homer Simpson)
            Meine Seite

            Kommentar


            • #7
              Danke, das ist genial und es funktioniert auch, aber ich habe immer noch 2 Arrays die ich durchlaufen muss?

              Code:
               
              Array ( 
              	[0] => Array ( 
              			[0] => [bar:foo] 
              			[1] => bar 
              			[2] => foo 
                                                   ) 
              	[1] => Array ( 
              			[0] => [test:lol] 
              			[1] => test 
              			[2] => lol 
                                                   ) 
                       )
              Ich steh grad richtig auf dem Schlauch


              PHP-Code:
              foreach ($hit as $a => $b)
              {
                  foreach (
              $hit[$a] as $key => $value)    
                  {
                      if (
              $key == 1)
                      {
                          
              $array .= $value;
                      }
                  }

              Ich brauch das aber als asso. Array.. Also $array[bar] = "foo" und $array[test] = "lol" ...

              ich bekomm es einfach nicht hin =(

              Kommentar


              • #8
                warum so kompliziert?
                PHP-Code:
                for ($i 0$i count($hit); $i++)
                {
                  
                $key $hit[$i][1];
                  
                $value $hit[$i][2];
                  
                $array[$key] = $value;

                aber immer $key und $value überprüfen.

                peter
                Nukular, das Wort ist N-u-k-u-l-a-r (Homer Simpson)
                Meine Seite

                Kommentar


                • #9
                  Danke! Ja ich dachte mir schon das es alles ein wenig kompliziert wird..
                  Bin nicht auf die for-Schleife gekommen, war irgendwie auf die foreach fixiert. Jetzt läuft es, herzlichen dank =)

                  Kommentar

                  Lädt...
                  X