In der Programmierung begegnen dir häufig Situationen, in denen du bestimmte Informationen aus langen Zeichenketten herauslesen musst. Besonders beim Verarbeiten von Benutzereingaben oder Daten aus externen Quellen ist es wichtig, Text systematisch und zuverlässig zu analysieren.

I. Einführung: Die Macht des String-Parsens mit php sscanf()
Die PHP-Funktion sscanf() gehört zu den vielseitigsten Werkzeugen, wenn es darum geht, strukturierte Informationen aus Strings auszulesen und direkt Variablen zuzuweisen. In diesem Guide lernst du, wie sscanf() funktioniert, wann sie ihre Stärken ausspielt, wo Grenzen liegen – und wie du Fallstricke vermeidest.
A. Was ist php sscanf()?
Definition:
Mit sscanf() kannst du einen String anhand eines von dir definierten Formats analysieren und gezielt Werte extrahieren. Es ist das “Input-Gegenstück” zu printf() – während printf Werte formatiert in einen String schreibt, liest sscanf formatierte Werte aus einem String heraus.
Kernfunktionalität:
Du gibst an, wie der String aufgebaut ist (z. B. Zahl, Text, Zahl), und bekommst diese Teile als Variablen oder als Array zurück. Besonders nützlich ist das, wenn du Logs, Benutzer-Eingaben oder strukturierte Texte schnell und sicher in einzelne Werte zerlegen möchtest.
B. Warum und wann sscanf() verwenden?
Vorteile:
- Einfachheit: Bei klar strukturierten Eingaben entfällt aufwendiges Parsen.
- Direkte Zuweisung: Extrahierte Werte landen sofort in Variablen.
Typische Anwendungsfälle:
- Logzeilen-Analyse (z. B. "[2025-05-19 16:00] ERROR: Datei nicht gefunden").
- Aufteilung von Benutzernamen, Datum, Zahlen aus Formularen oder Textdateien.
- Datenimport aus anderen Anwendungen mit festen Formaten.
C. Was Sie in diesem Guide erwartet
- Grundlagen, fortgeschrittene Techniken und häufige Fehlerquellen.
- Interaktive Beispiele und Cheat-Sheets.
- Praxisvergleiche zu Alternativen wie preg_match() oder explode().
II. php sscanf() – Die Grundlagen verstehen
A. Syntax im Detail
/**
* String analysieren und extrahieren:
* @param string $sText – Der zu analysierende String
* @param string $sFormat – Das gewünschte Format
* @param mixed &...$mVariablen – Optionale per Referenz übergebene Variablen
* @return array|int|null – Array (ohne Variablen), int (mit Variablen) oder null
*/
sscanf(string $sText, string $sFormat, mixed &...$mVariablen): array|int|null;
B. Parameter-Analyse
1. $sText:
Der Quell-String. Beispiele:
- "123 abc"
- "17.11.2025 18:22"
2. $sFormat:
Bestimmt, wie die Werte im String gefunden und interpretiert werden.
- Literalzeichen (z. B. Trennstriche, Leerzeichen) müssen im String genauso vorkommen.
- Format-Spezifizierer geben an, wie die Werte gelesen werden.
Beispiel:
"%d %s" liest eine Zahl gefolgt von einem Wort, getrennt durch Whitespace.
3. &$mVariablen:
Optionale Variablen, die du per Referenz übergibst. Werden direkt befüllt.
- Keine Variablen: sscanf() gibt ein Array mit den gefundenen Werten zurück.
- Mit Variablen: sscanf() gibt die Anzahl der erfolgreich zugewiesenen Werte zurück.
/**
* %[Unterdrückung][Breite]Typ
* Beispiele: %d, %*s, %3s, %x, %f
*/
B. Die wichtigsten Typ-Spezifizierer
Die Wahl des passenden Typ-Spezifizierers entscheidet darüber, wie die Funktion einzelne Datenfragmente aus dem Text interpretiert und weitergibt.
Spezifizierer | Beschreibung | Beispiel |
%d | Vorzeichenbehaftete Dezimalzahl | “42”, “-7” |
%u | Vorzeichenlose Dezimalzahl | “99” |
%f | Fließkommazahl | “3.141”, “-0.5” |
%s | Zeichenkette (bis Whitespace) | “Max”, “Mustermann” |
%c | Einzelnes Zeichen | “M” |
%x, %X | Hexadezimalzahl | “2A” (42 in Dezimal) |
%o | Oktalzahl | “077” |
%i | Intelligente Ganzzahl (Basis auto) | “42”, “0x2A”, “052” |
%n | Anzahl der verarbeiteten Zeichen | (zählt, keine Extraktion im eigentl. Sinn) |
%% | Ein Prozentzeichen | “%” |
Praktische Beispiele:
$sText = "42 Max";
sscanf($sText, "%d %s", $iNummer, $sName);
/* $iNummer = 42, $sName = "Max" */
- Nicht unterstützt: F, g, G, b
- Immer Punkt als Dezimaltrennzeichen (kein Komma!)
- Keine Locale-Sensitivität
D. Modifikatoren für präzisere Kontrolle
Zuweisungsunterdrückung (*):
Mit %*s wird ein Wert übersprungen:
$sText = "Max Mustermann";
sscanf($sText, "%*s %s", $sNachname);
/* $sNachname = "Mustermann" */
Breitenangabe:
Limitiert die Anzahl gelesener Zeichen:
$sText = "ABC123";
sscanf($sText, "%3s%d", $sTeil1, $iTeil2); // $sTeil1 = "ABC", $iTeil2 = 123
E. Interaktives Cheat-Sheet: Tabelle
Format | Beschreibung | Beispiel | Ergebnis |
%d | Zahl | “42” | 42 |
%3s | 3 Zeichen als String | “abc” | “abc” |
%*s | String überspringen | “foo bar” | “bar” |
%f | Float | “3.14” | 3.14 |
%c | Einzelnes Zeichen | “X” | “X” |
%n | Anzahl Zeichen | “12345” | 5 (so viele verarbeitet) |
IV. Rückgabewerte meistern und Fehler souverän behandeln
Die Art des Rückgabewerts bestimmt, wie du mit den extrahierten Informationen im weiteren Programmablauf arbeiten kannst.
A. Was sscanf() zurückgibt
- Mit Variablen: Anzahl der erfolgreich zugewiesenen Werte (int).
- Ohne Variablen: Array mit den geparsten Werten (array).
Beispiel mit Variablen:
$sText = "99 Luftballons";
$iAnzahl = 0;
$sWort = "";
$iGefunden = sscanf($sText, "%d %s", $iAnzahl, $sWort);
/** $iGefunden = 2, $iAnzahl = 99, $sWort = "Luftballons" */
Beispiel ohne Variablen:
$sText = "25 Apfel";
$aGefunden = sscanf($sText, "%d %s");
/** $aGefunden = [25, "Apfel"] */
B. Fehlererkennung und Umgang
-
Rückgabewert null:
Mehr Felder im Format als im String vorhanden.
-
Zu viele Format-Spezifizierer:
Fehler in PHP.
-
Zu viele Variablen:
Überzählige bleiben unverändert oder werden auf null gesetzt.
Best Practice:
Immer Rückgabewert prüfen!
V. php sscanf() in der Praxis: Von einfach bis anspruchsvoll
Einsteiger beginnen am besten mit einfachen Beispielen, um das Prinzip des Parsens und die Wirkung verschiedener Platzhalter praktisch zu verstehen.
A. Grundlegende Beispiele
1. Zahlen extrahieren:
$sText = "Bestellung 123 enthält 5 Artikel";
sscanf($sText, "Bestellung %d enthält %d Artikel", $iBestellnr, $iArtikel);
/** $iBestellnr = 123, $iArtikel = 5 */
2. Namen splitten:
$sText = "Max Mustermann";
sscanf($sText, "%s %s", $sVorname, $sNachname);
/** $sVorname = "Max", $sNachname = "Mustermann" */
3. Datum parsen:
$sText = "Januar 01 2023";
sscanf($sText, "%s %d %d", $sMonat, $iTag, $iJahr);
/** $sMonat = "Januar", $iTag = 1, $iJahr = 2023 */
B. Beispiele mittlerer Komplexität
1. Fester Präfix und Suffix:
$sText = "SN/0042-X";
sscanf($sText, "SN/%d-%c", $iNummer, $sBuchstabe);
/** $iNummer = 42, $sBuchstabe = "X" */
2. Verschiedene Datentypen kombiniert:
$sText = "User: 17 Alter: 28";
sscanf($sText, "User: %d Alter: %d", $iId, $iAlter);
/** $iId = 17, $iAlter = 28 */
3. Zuweisungsunterdrückung:
$sText = "2025-05-19 Fehler: 404";
sscanf($sText, "%d-%d-%d Fehler: %d", $iJahr, $iMonat, $iTag, $iFehler);
/** $iJahr = 2025, $iMonat = 5, $iTag = 19, $iFehler = 404 */
C. Fortgeschrittene Szenarien
1. Optionale Teile:
sscanf() kann keine wirklich optionalen Felder abdecken – in solchen Fällen ist oft ein regulärer Ausdruck (preg_match()) besser.
2. Variable Leerzeichen:
$sText = "42 Max";
sscanf($sText, "%d %s", $iZahl, $sName);
/** Klappt, da beliebig viele Whitespaces zwischen %d und %s erlaubt sind */
Auch erfahrene Entwickler laufen beim Parsen von Zeichenketten schnell in typische Stolperfallen, die sich mit dem richtigen Wissen gezielt umgehen lassen.
A. Häufige Fehler und wie man sie vermeidet
-
Vergessene Referenz (&):
Die Variablen müssen per Referenz übergeben werden.
-
Format-Missverständnisse:
%s liest nur bis zum nächsten Leerzeichen, %d nur Zahlen – auf den Input achten!
-
Strukturannahmen:
Der Format-String muss exakt zur String-Struktur passen.
-
Kommentiere komplexe Formate:
/** %d-%d-%d: Jahr-Monat-Tag */
-
Kombiniere ggf. mehrere sscanf()-Aufrufe, wenn ein Format zu komplex wird.
- sscanf() ist sehr schnell für strukturierte, einfache Daten.
- Bei sehr großen Datenmengen (z. B. 100.000 Zeilen in Schleifen) gibt es kaum Performance-Unterschiede zu explode() – reguläre Ausdrücke sind aufwendiger, dafür aber flexibler.
VII. sscanf() im Kontext: Alternativen und wann sie glänzen
Manche Parsing-Aufgaben lassen sich mit regulären Ausdrücken flexibler oder genauer lösen, insbesondere wenn Muster komplexer oder variabler ausfallen.
A. preg_match(), preg_match_all()
Stärken:
Komplexe Muster, optionale Gruppen, flexible Logik.
Schwächen:
Aufwendiger, schwerer zu lesen.
Vergleich:
// Mit sscanf()
$sText = "ID: 234, Name: Lisa";
sscanf($sText, "ID: %d, Name: %s", $iId, $sName);
// Mit preg_match()
preg_match('/ID: (d+), Name: (w+)/', $sText, $aTreffer);
B. explode()
Ideal bei festen Trennzeichen:
$sText = "Apfel,Banane,Orange";
$aFruechte = explode(",", $sText);
/** ["Apfel", "Banane", "Orange"] */
C. str_getcsv()
Für CSV-Daten:
$sText = '"Max","Mustermann",42';
$aWerte = str_getcsv($sText);
/** ["Max", "Mustermann", "42"] */
D. Manuelles Parsen (strpos(), substr())
Für sehr individuelle Anforderungen, z. B. verschachtelte Strukturen.
VIII. Verwandte Funktionen: Ein kurzer Überblick
Funktion | Aufgabe | Besonderheit |
fscanf() | Parsen aus Datei-Stream | Wie sscanf(), aber mit Dateihandle |
sprintf() | String zusammenbauen | Gegenstück zu sscanf(), formatiert |
printf() | Formatiert direkt ausgeben | Kein Rückgabewert |
IX. Fazit: php sscanf() als wertvolles Werkzeug im PHP-Arsenal
Mit sscanf() parst du klar strukturierte Strings besonders elegant, sicher und performant. Bei eindeutigem Aufbau (z. B. Logzeilen, IDs, CSV-ähnlichen Formaten) gibt es kaum eine schnellere Alternative. Nutze die Stärken von sscanf() und kombiniere sie bei Bedarf mit regulären Ausdrücken oder eigenen Parsing-Algorithmen, wenn die Struktur komplexer wird.
Experimentiere mit Format-Strings, kommentiere deine Formate und prüfe den Rückgabewert – dann vermeidest du typische Fehler und profitierst maximal von diesem unterschätzten PHP-Tool.
X. Anhang
Eine kompakte Übersicht der Format-Spezifizierer hilft, bei der Arbeit mit verschiedenen Datentypen schnell die richtige Auswahl zu treffen.
Format | Bedeutung | Beispiel |
%d | Vorzeichenbehaftete Zahl | 42, -7 |
%u | Vorzeichenlose Zahl | 77 |
%f | Fließkommazahl | 3.14, -0.5 |
%s | Zeichenkette (bis Whitespace) | Max, Mustermann |
%c | Einzelnes Zeichen | M |
%x | Hexadezimalzahl | 2A |
%o | Oktalzahl | 077 |
%i | Zahl, Basis automatisch | 42, 0x2A, 052 |
%n | Anzahl der bisher gelesenen Zeichen | |
%% | Prozentzeichen | % |
B. Glossar
- Format-Spezifizierer: Platzhalter im Format-String, die den Typ und das Format des erwarteten Werts bestimmen.
- Referenz (&): Zeichen vor einer Variablen, damit eine Funktion den Wert direkt setzen kann.
- Literal: Fester Textbestandteil im Format-String (z. B. Leerzeichen, Doppelpunkt, Komma).