Start · Sprachen · PHP · Referenz · preg_match_all

preg_match_all

Funktion

Findet alle Vorkommen eines Regex-Patterns in einem String und liefert alle Treffer.

seit PHP 4.0.0 Kategorie: regex

Signatur

preg_match_all(string $pattern, string $subject, array &$matches = null, int $flags = 0, int $offset = 0): int|false

Beschreibung

Während preg_match() nach dem ersten Treffer aufhört, liest preg_match_all() den kompletten String durch und sammelt alle Matches.

Standard-Struktur des $matches-Arrays: $matches[0] = alle Vollmatches, $matches[1] = alle ersten Capture-Groups, usw. Mit PREG_SET_ORDER wird stattdessen pro Treffer gruppiert — meist übersichtlicher.

Parameter

Name Typ Default Beschreibung
$pattern Pflicht string Regex mit Delimitern.
$subject Pflicht string Der zu durchsuchende String.
$matches array& null Referenz-Array mit allen Treffern.
$flags int 0 PREG_PATTERN_ORDER (default) oder PREG_SET_ORDER.
$offset int 0 Startposition in Bytes.

Rückgabewert

Typ
int|false
Beschreibung
Anzahl der Treffer. false bei Fehler.

Beispiele

Alle E-Mails aus einem Text extrahieren

<?php

$text = 'Kontakt: anna\@example.com, ben\@site.de';

preg_match_all('/[\w.+-]+\@[\w.-]+\.[a-z]{2,}/i', $text, $matches);

foreach ($matches[0] as $email) {
    echo $email . "\n";
}
anna@example.com ben@site.de

PREG_SET_ORDER für strukturierte Treffer

<?php

preg_match_all(
    '/(\w+):\s*(\d+)/',
    'a: 1, b: 22, c: 333',
    $matches,
    PREG_SET_ORDER
);

foreach ($matches as $m) {
    echo "{$m[1]} = {$m[2]}\n";
}
a = 1 b = 22 c = 333

Siehe auch