regex bis zum ersten Vorkommen

Collapse
X
 
  • Filter
  • Time
  • Show
Clear All
new posts

  • regex bis zum ersten Vorkommen

    Ich möchte aus dem String:

    12345#1857#22#,
    alles innerhalb der #-Zeichen extrahieren. Wenn es mehrere eingeschlossene Zeichenfolgen mit # gibt, sollte jeder Inhalt in ein Array liegen. Bisher habe ich nur die Zeichenfolge ab dem ersten #-Zeichen und dem letzten #-Zeichen mit folendem Code erhalten.

    PHP Code:
    /#(.*)/ 
    Kann mir jemand behilflich sein?
    » http://www.htaccess-generator.com

  • #2
    PHP: Mgliche Modifikatoren in RegEx-Suchmustern - Manual

    sollte dir helfen.
    Bitte Beachten.
    Foren-Regeln
    Danke

    Comment


    • #3
      Geht es wirklich nur um die eingeschlossenen Werte?

      Also:
      Code:
      1857, 22
      ?

      Comment


      • #4
        wenn ich das nun richtig verstanden habe suchst du das hier:
        PHP - explode

        Comment


        • #5
          Originally posted by matt_dominik View Post
          wenn ich das nun richtig verstanden habe suchst du das hier:
          PHP - explode
          Das würde aber auch 12345 finden. Wobei man natürlich das nullte und letzte Element auslassen könnte.

          Ungreedy dürfte aber das gewünschte Ergebnis liefern, wie bereits vorgeschlagen.

          Comment


          • #6
            Originally posted by TobiaZ View Post
            Ungreedy dürfte aber das gewünschte Ergebnis liefern, wie bereits vorgeschlagen.
            Nö, tut es nicht. Hab ich schon ausprobiert. Zumindest nur auf die Schnelle:
            PHP Code:
            $str '12345#1857#22#132454#2312';
            preg_match_all('/#([0-9]{1,})#/U'$str$hitPREG_SET_ORDER);
            print_r($hit); 
            unterschlägt hier die 22. Keine Ahnung warum, aber es ist auch schon spät.

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

            Comment


            • #7
              Stimmt, weil die Raute zum vorherigen Ergebnis (1857) gehört und erst danach weiter gesucht wird.

              Also entweder ein Pattern ohne U und # [edit]dafür mir backreferenz(?)[/ edit] oder aber explode mit auslassen der unerwünschten Ergebnisse.

              Kommt drauf an, was genau diese Zeichenkette ist.
              Last edited by TobiaZ; 07-10-2010, 20:17.

              Comment


              • #8
                Originally posted by Kropff View Post
                unterschlägt hier die 22. Keine Ahnung warum
                Weil der Positions-„Zeiger“, ab dem weiter gesucht wird, nach dem Finden von #1857# bereits auf der ersten 2 der 22 steht, und damit der Ausdruck erst ab dem nächsten #, dem vor 132454, wieder fündig wird.

                Da das # beim vorliegenden Ausdruck sowohl zum Ende des vorherigen als auch zum Beginn des nächsten (gewünschten) Treffers gehören würde, überschneiden sich die Suchtreffer - und sowas findet der reguläre Ausdruck nicht.
                I don't believe in rebirth. Actually, I never did in my whole lives.

                Comment


                • #9
                  Originally posted by wahsaga View Post
                  Weil der Positions-„Zeiger“, ab dem weiter gesucht wird, nach dem Finden von #1857# bereits auf der ersten 2 der 22 steht, und damit der Ausdruck erst ab dem nächsten #, dem vor 132454, wieder fündig wird.
                  Davon bin ich ausgegangen. Wollte aber zu so später Stunde keinen Blödsinn reden. Wie schon gesagt, es ist spät, meine Haare sind grau, meine Augen sind blind und Kreuzigung ist Firlefanz.

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

                  Comment


                  • #10
                    Hab`s jetzt fast... allerdings habe ich noch das Problem das ich die letzte Zeichenfolgen nicht in das Array bekommen... durch das , - Komma werden die Zeichen in Gruppen eingeteilt. Nun hat die letzte Gruppen kein Komma am Schluss... ich dachte ich könnte das durch ein | - oder lösen, aber da kommt nix...

                    String.
                    0001#1857,0002#244,ST 0023#3874
                    Regex:
                    #(.*)\#[1-9](.*)[,|\z]#U
                    » http://www.htaccess-generator.com

                    Comment

                    Working...