preg_match_all: Warum zwei Felder?

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

  • preg_match_all: Warum zwei Felder?

    Hey ihr. Mir ist gerade beim Hantieren mit preg_match_all etwas aufgefallen das mir einige Fehler und seltsames Verhalten beschert hat.

    Folgender Aufruf:
    PHP-Code:
    echo "input: ".$text."<br />";
    preg_match_all('/?<=@)([^\s@,\n\r]+)/'$text$matches);
    echo 
    "<pre>matches:
    "
    ;
    print_r($matches);
    echo 
    "</pre>"
    Erzeugt folgendes Ergebnis:

    Code:
    input: @apoy2k @apo y2k @ apoy2k@apoy2k@apo y2k
    matches:
    Array
    (
        [0] => Array
            (
                [0] => apoy2k
                [1] => apo
                [2] => apoy2k
                [3] => apo
            )
    
        [1] => Array
            (
                [0] => apoy2k
                [1] => apo
                [2] => apoy2k
                [3] => apo
            )
    
    )
    Die Ergebnisse sind natürlich richtig, aber warum hat das Array zwei Felder? Und noch dazu in beiden die gleichen Ergebnisse in der gleichen Reihenfolge?
    This is what happens when an unstoppable force meets an immovable object.

  • #2
    Ohne 4. Parameter funktioniert preg_match_all() eben so.
    Orders results so that $matches[0] is an array of full pattern matches, $matches[1] is an array of strings matched by the first parenthesized subpattern, and so on

    Kommentar


    • #3
      Hm, die Erklärung hab ich in der Doku nicht wirklich verstanden... Aber wenn ichs mir so anschaue sind die beiden Klammern eh sinnlos. Wenn ich die weglasse kommt immerhin nur ein Feld raus, das ist gut genug.
      This is what happens when an unstoppable force meets an immovable object.

      Kommentar


      • #4
        Hm, die Erklärung hab ich in der Doku nicht wirklich verstanden...
        wenn du x teilpatterns im pattern hast, erhältst du halt x+1 arrays. das macht in deinem fall keinen sinn, daher kannnst du die klammern auch weglassen. oft braucht man aber eben die werte die die teilpatterns finden.

        schon mal mit mod_rewrite gearbeitet? da verwendest du sicher auch oft $1 und $2, $3, ... genauso ist es bei PHP auch.

        Kommentar


        • #5
          Jo das kenn ich auch, braucht man bei preg_replace ja auch oft. Es gibt manchmal einfach Tage, an denen versteh ich kein Wort der Doku xD
          This is what happens when an unstoppable force meets an immovable object.

          Kommentar

          Lädt...
          X