W3docs

preg_match()

Die PHP-Funktion preg_match() führt einen regulären Ausdrucks-Abgleich gegen einen String durch und gibt 1 bei Treffer oder 0 zurück.

Einführung

preg_match() führt einen regulären Ausdrucks-Abgleich gegen einen String durch. Die Funktion gibt an, ob ein PCRE-Muster im zu prüfenden String vorkommt, und erfasst optional was übereinstimmt. Sie stoppt beim ersten Treffer — wenn jedes Vorkommen benötigt wird, verwenden Sie stattdessen preg_match_all().

Dieses Kapitel behandelt die Signatur und Rückgabewerte, die Befüllung des $matches-Arrays, die nützlichsten Flags und die häufigen Fallstricke (die 0-vs-false-Falle, Verankerung, Trennzeichen), über die man gerne stolpert.

Syntax

preg_match(
    string $pattern,
    string $subject,
    array &$matches = null,
    int $flags = 0,
    int $offset = 0
): int|false
ParameterBeschreibung
$patternDas Muster einschließlich Trennzeichen und optionaler Modifikatoren, z. B. '/colou?r/i'.
$subjectDer zu durchsuchende String.
&$matchesWird per Referenz gefüllt: $matches[0] ist der vollständige Treffer, $matches[1], $matches[2]… sind die Erfassungsgruppen.
$flagsBit-Flags wie PREG_OFFSET_CAPTURE und PREG_UNMATCHED_AS_NULL.
$offsetByte-Offset, ab dem die Suche beginnt.

Rückgabewert: 1 wenn das Muster übereinstimmt, 0 wenn nicht, oder false bei einem Fehler (ungültiges Muster). Da preg_match() höchstens 1 zurückgibt, teilt es nie mit, wie viele Treffer es gibt — nur ob es einen gab.

Einfaches Beispiel

php— editable, runs on the server

Das Muster erfasst ein alphabetisches Wort, gefolgt von Leerzeichen und einem weiteren Wort. Bei einem Treffer enthält $matches[0] den vollständigen Treffer (This is) und $matches[1] / $matches[2] die beiden erfassten Gruppen (This und is).

Die 0-vs-false-Falle

Ein sehr häufiger Fehler ist die Verwendung von == zur Prüfung des Ergebnisses. preg_match() gibt 0 für „kein Treffer" und false nur bei einem Fehler zurück, und 0 == false ist in PHP true. Vergleichen Sie immer mit dem strengen Operator:

<?php

$result = preg_match('/[0-9]+/', 'abc');

// Wrong: treats "no match" and "error" the same
if ($result == false) {
  echo "ambiguous\n";
}

// Right: distinguish the three outcomes
if ($result === false) {
  echo "Error in the pattern\n";
} elseif ($result === 0) {
  echo "No match\n";
} else {
  echo "Matched\n";
}

Dies gibt ambiguous und danach No match aus.

Benannte Gruppen

Fügen Sie (?<name>...) zu Ihrem Muster hinzu, und $matches enthält die Erfassungen sowohl unter dem numerischen Index als auch unter dem Namen, was den Code lesbar hält, wenn sich die Gruppenreihenfolge ändert:

<?php

$date = '2026-06-21';
preg_match('/(?<year>\d{4})-(?<month>\d{2})-(?<day>\d{2})/', $date, $m);

echo $m['year'] . "\n";  // 2026
echo $m['month'] . "\n"; // 06
echo $m['day'];          // 21

Offsets erfassen mit PREG_OFFSET_CAPTURE

Übergeben Sie das Flag PREG_OFFSET_CAPTURE, und jeder Eintrag in $matches wird zu einem [übereinstimmender_text, byte_offset]-Paar, sodass Sie erkennen können, wo der Treffer aufgetreten ist:

<?php

preg_match('/world/', 'hello world', $m, PREG_OFFSET_CAPTURE);

echo $m[0][0] . "\n"; // world
echo $m[0][1];        // 6

Groß-/Kleinschreibung ignorierende und verankerte Muster

Modifikatoren stehen nach dem schließenden Trennzeichen. Der Modifikator i ignoriert die Groß-/Kleinschreibung; ^ und $ verankern den Treffer am Anfang und Ende des Strings, sodass der gesamte Subject dem Muster entsprechen muss:

<?php

var_dump(preg_match('/^hello$/i', 'HELLO')); // int(1)
var_dump(preg_match('/^hello$/i', 'hello!')); // int(0)

Wann man zu einer anderen Funktion greift

Fazit

preg_match() ist die erste Wahl, um zu testen, ob ein String einem Muster entspricht, und um erfasste Gruppen zu extrahieren. Denken Sie an die drei Rückgabewerte, vergleichen Sie mit ===, um die 0/false-Falle zu vermeiden, und wechseln Sie zu preg_match_all(), wenn ein Treffer nicht ausreicht.

Übungen

Übung
Was ist der Zweck der Funktion 'preg_match' in PHP?
Was ist der Zweck der Funktion 'preg_match' in PHP?
Was this page helpful?