Navigation
 Startseite
 Fachbücher
 Forum
 Webmaster News
 Script Newsletter
 Kontakt
 Script Installation
 Php
 Php Tutorials
 Impressum

Community-Bereich
 kostenlos Registrieren
 Anmelden
 Benutzerliste

Script Datenbank
 Script Archiv
 Script Top 20
 Screenshots
 Testberichte

Suche
 

Unsere Php Scripts
 Counter Script
 Umfrage Script
 Bilder Upload Script
 Terminverwaltung
 Simple PHP Forum
 RSS Grabber

Script Mods
 phpBB Adsense Mode

Tools und Generatoren
 .htpasswd Generator
 md5 Generator
 base64 Generator
 Markdown to HTML
 Colorpicker
 Unix timestamp Tool
 TLD Liste
 Webkatalog‑Verzeichnis

Partner
 Sprüche Treff

Hosterplus.de
Bekommen Sie Speicherplatz (Webspace), Domains...
https://www.Hosterplus.de
Artfiles.de
Bietet Serviceorientierte...
https://www.Artfiles.de
 
 
 

PHP sscanf() - Die umfassende Anleitung zum Parsen von Strings

Sie befinden sich: Home > Php Tutorial > String in ein angegebenes...

String in ein angegebenes Format übertragen


Eintrag am:  14.08.2010
Hits / Besucher:  4214
Sprache:  Deutsch
Kategorie:  Fortgeschrittene...
Tutorial Art:  eigenes
Eingetragen von   schubertmedia schubertmedia
 
Beschreibung

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.

Titelbild mit PHP-Logo, Code-Schnipseln, Trichter und Text „PHP sscanf(): Strings clever zerlegen und auslesen“

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.

III. Der Format-String: Das Herzstück von sscanf()

A. Aufbau eines Format-Spezifizierers

/** 
* %[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" */

C. Unterschiede zu sprintf()-Formaten

  • 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 */

VI. Für Profis: Best Practices, Fallstricke und Performance

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

  1. Vergessene Referenz (&):
    Die Variablen müssen per Referenz übergeben werden.

  2. Format-Missverständnisse:
    %s liest nur bis zum nächsten Leerzeichen, %d nur Zahlen – auf den Input achten!

  3. Strukturannahmen:
    Der Format-String muss exakt zur String-Struktur passen.

B. Tipps für lesbare und wartbare Format-Strings

  • Kommentiere komplexe Formate:

    /** %d-%d-%d: Jahr-Monat-Tag */ 
  • Kombiniere ggf. mehrere sscanf()-Aufrufe, wenn ein Format zu komplex wird.

C. Performance

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

A. Referenztabelle der wichtigsten Format-Spezifizierer

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).

 

Tags:

 

Bücherregal mit drei Büchern: 'PHP 4 - Grundlagen und Profiwissen' von Hanser Verlag, 'Webdesign in a Nutshell' von O'Reilly Verlag, und 'Webgestaltung' von Galileo Computing.