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