regex bis zum ersten Vorkommen

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

  • 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

    Kommentar


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

      Also:
      Code:
      1857, 22
      ?

      Kommentar


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

        Kommentar


        • #5
          Zitat von matt_dominik Beitrag anzeigen
          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.

          Kommentar


          • #6
            Zitat von TobiaZ Beitrag anzeigen
            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

            Kommentar


            • #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.
              Zuletzt geändert von TobiaZ; 07.10.2010, 21:17.

              Kommentar


              • #8
                Zitat von Kropff Beitrag anzeigen
                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.

                Kommentar


                • #9
                  Zitat von wahsaga Beitrag anzeigen
                  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

                  Kommentar


                  • #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

                    Kommentar

                    Lädt...
                    X