W3docs

preg_split

Die Funktion preg_split() in PHP teilt einen String anhand eines regulären Ausdrucks in ein Array von Teilstrings auf.

Einführung

preg_split() teilt einen String in ein Array von Teilstrings auf, wobei ein regulärer Ausdruck als Trennzeichen verwendet wird. Es ist der regex-gestützte Verwandte von explode(): Während explode() nur auf einen festen String aufteilen kann, kann preg_split() auf einem Muster aufteilen — beliebige Leerzeichen, eines von mehreren Satzzeichen, eine Zifferngrenze und so weiter.

Diese Seite behandelt die Funktionssignatur, alle Flags, den Rückgabewert sowie praktische Muster (und Fallstricke), die beim Einsatz in echtem Code auftreten.

Syntax

preg_split(
    string $pattern,
    string $subject,
    int $limit = -1,
    int $flags = 0
): array|false
ParameterBeschreibung
$patternDer reguläre Ausdruck als Trennzeichen, einschließlich Begrenzungszeichen wie /.../.
$subjectDer aufzuteilende Eingabe-String.
$limitMaximale Anzahl der Teile. -1 (Standard) oder 0 bedeutet kein Limit. Wenn gesetzt, enthält das letzte Element den nicht aufgeteilten Rest.
$flagsBitmaske aus PREG_SPLIT_*-Konstanten (siehe unten). Mit `

Die Funktion gibt bei Erfolg ein Array von Teilstrings zurück oder false, wenn das Muster ungültig ist. Sie wirft keine Ausnahme — prüfen Sie auf false (und siehe preg_last_error()), wenn ein Aufteilen fehlschlagen kann.

Ein einfaches Beispiel

Ein klassischer Anwendungsfall ist das Aufteilen eines Strings auf ein Trennzeichen, das variiert — hier beliebige Leerzeichen oder Kommas:

php— editable, runs on the server

Das Muster [\s,]+ trifft auf ein oder mehrere Leerzeichen- oder Kommazeichen zu, sodass sowohl die Leerzeichen als auch das Komma als Trennzeichen wirken:

Array
(
    [0] => This
    [1] => is
    [2] => a
    [3] => test
    [4] => string
)

Da + gierig ist, werden aufeinanderfolgende Trennzeichen (ein Komma und ein Leerzeichen) zu einem einzigen Trennpunkt zusammengefasst, anstatt leere Elemente zu erzeugen.

Die Flags

PREG_SPLIT_NO_EMPTY

Ohne dieses Flag erzeugt ein Trennzeichen ganz am Anfang oder Ende des Strings — oder zwei aufeinanderfolgende Trennzeichen, die das Muster nicht zusammenführen kann — leere Strings im Ergebnis. PREG_SPLIT_NO_EMPTY entfernt diese:

<?php

$string = ',apple,,banana,';

// Without the flag: empty pieces appear.
print_r(preg_split('/,/', $string));

// With the flag: only real values remain.
print_r(preg_split('/,/', $string, -1, PREG_SPLIT_NO_EMPTY));

Der erste Aufruf liefert ['', 'apple', '', 'banana', '']; der zweite liefert ['apple', 'banana'].

PREG_SPLIT_DELIM_CAPTURE

Enthält das Muster Capture-Gruppen, schließt dieses Flag den erfassten Text ins Ergebnis ein — nützlich, wenn die Trennzeichen erhalten bleiben sollen, statt verworfen zu werden:

<?php

$expression = '3+5*2-9';
$tokens = preg_split('/([+\-*\/])/', $expression, -1, PREG_SPLIT_DELIM_CAPTURE);

print_r($tokens);

Das Ergebnis behält sowohl die Zahlen als auch die Operatoren: ['3', '+', '5', '*', '2', '-', '9'] — genau das, was ein einfacher Ausdruck-Tokenizer benötigt.

PREG_SPLIT_OFFSET_CAPTURE

Jedes Element wird zu einem [$substring, $offset]-Paar, wobei $offset die Byte-Position im ursprünglichen String ist. Praktisch, wenn Sie wissen müssen, woher jedes Teil stammt.

Die Anzahl der Aufteilungen begrenzen

$limit begrenzt die Anzahl der zurückgegebenen Teile; das letzte Element behält den Rest des Strings unaufgeteilt. Dies ist die idiomatische Methode, um „die ersten N Felder und dann alles andere" aufzuteilen:

<?php

$logLine = 'ERROR 2024-01-01 Something broke: details here';

// Split into at most 3 parts on whitespace.
$parts = preg_split('/\s+/', $logLine, 3);

print_r($parts);

Das liefert ['ERROR', '2024-01-01', 'Something broke: details here'] — das dritte Element behält seine inneren Leerzeichen, da das Limit erreicht wurde.

preg_split() vs. explode()

Verwenden Sie explode(), wenn das Trennzeichen ein einzelner fester String ist — es ist schneller und klarer. Verwenden Sie preg_split(), wenn das Trennzeichen ein Muster ist: variable Leerzeichen, eine Auswahl von Zeichen, Groß-/Kleinschreibung-unabhängiges Matching oder wenn Sie die Trennzeichen über PREG_SPLIT_DELIM_CAPTURE behalten möchten. Um ein Array wieder zu einem String zusammenzufügen, verwenden Sie implode().

Häufige Fallstricke

  • Fehlende Muster-Begrenzer. Das erste Argument ist ein vollständiger regulärer Ausdruck und benötigt daher Begrenzer: '/,/', nicht ','. Einen nackten String zu übergeben ist der häufigste Anfängerfehler.
  • Nicht maskierte Sonderzeichen. Zeichen wie ., +, | und * sind Regex-Metazeichen. Um auf einen wörtlichen Punkt aufzuteilen, maskieren Sie ihn ('/\./') oder verwenden Sie preg_quote() bei dynamischen Eingaben.
  • Unerwünschte leere Strings. Führende/nachfolgende Trennzeichen erzeugen leere Elemente — fügen Sie PREG_SPLIT_NO_EMPTY hinzu, wenn Sie diese nicht möchten.

Verwandte Funktionen

Übungen

Übung
Was ist die Funktion von preg_split in PHP und wann sollte sie verwendet werden?
Was ist die Funktion von preg_split in PHP und wann sollte sie verwendet werden?
Was this page helpful?