Stefan: Regulärer Ausdruck - String nach x Zeichen iterativ splitten

Liebe RegEx-Athleten,

ich versuche mich seit geraumer Zeit an Regex-Ausdrücken. Ich las etliche Tutorials und einiges wurde mir klar. Dennoch gibt´s immer wieder Dinge an denen ich verzweifel und zu denen ich nirgendwo Erkärungen finde.

Hilfe!

zB:

$str = "012345678901234567890123456789012345678923";

Das ist ein String aus 42 Zeichen, den ich nach jedem 5 Zeichen splitten will und dann gerne als Array erhalten möchte.

Das geht nicht:

$arr = preg_split('/.{10,10}/', $str, -1);

denn
print_r($arr);
liefert mir dann:

Array
(
    [0] =>
    [1] =>
    [2] =>
    [3] =>
    [4] => 23
)

Warum sind die Indices 0-4 leer? Wie kriege ich die Funktion dazu, die zurückzuliefern? Die PHP-Flags (wie PREG_SPLIT_DELIM_CAPTURE) der Funktion ändern wenig. Zig Modifikationen des Ausdrucks auch nicht.

Ich versteh da was nicht.

Wer kann mir helfen und sagen, was?

Gruß,
Stefan

  1. Ähm.... ich meinte nach jedem 10 Zeichen.
    Deshalb {10,10}
    Gruß,
    Stefan

  2. hi,

    ich versuche mich seit geraumer Zeit an Regex-Ausdrücken.

    Dann mach dir bitte als allererstes klar, dass RegEx zwar ein sehr mächtiges Werkzeug sind - aber auch ein "teures".
    Man sollte sie also niemals dort einsetzen, wo es weniger aufwendige Lösungsmöglichkeiten gibt.

    Das ist ein String aus 42 Zeichen, den ich nach jedem 5 Zeichen splitten will und dann gerne als Array erhalten möchte.

    chuck_split()

    gruß,
    wahsaga

    --
    /voodoo.css:
    #GeorgeWBush { position:absolute; bottom:-6ft; }
    1. Danke wahsaga,

      aber ich suche tatsächlich nach ner Lösung als RegEx aus Verständnisgründen. Stände ich vor dem konkreten Problem, hätte ich eine for Schleife und substr() benutzt. Und jetzt auch chuck_split() :)

      Ich habe aber gerade parallel in nem anderen Forum als Antwort einen Ausdruck erhalten, der mein Problem löst:

      $arr = preg_split('/(.{10})/',$str,-1,PREG_SPLIT_DELIM_CAPTURE | PREG_SPLIT_NO_EMPTY);

      Ich denke, der geklammerte Ausdruck (.{10}) und die Function-Flags bringen das gewünschte Ergebnis.

      Danke nochmal,
      Stefan