Signatur
Beschreibung
mb_ereg() prüft, ob der Reguläre Ausdruck $pattern im String $string gefunden wird. Im Gegensatz zu preg_match() arbeitet diese Funktion mit der internen Multibyte-Zeichenkodierung und unterstützt damit Zeichensätze wie UTF-8, EUC-JP oder Shift_JIS korrekt, ohne dass spezielle Modifier notwendig sind.
Wird der optionale Parameter $regs übergeben, wird er als Array mit den gefundenen Übereinstimmungen befüllt: Index 0 enthält den gesamten übereinstimmenden String, Index 1 bis n enthalten die Treffer der einzelnen Capture-Gruppen. Stimmt kein Treffer überein, bleibt $regs unverändert.
Die aktive Zeichenkodierung kann mit mb_regex_encoding() gesetzt werden. Standardmäßig wird die interne Kodierung (mb_internal_encoding()) verwendet. Das Pattern nutzt die POSIX-Extended-Regex-Syntax (wie GNU regex), nicht die Perl-kompatible PCRE-Syntax.
Die Funktion ist besonders nützlich bei der Verarbeitung asiatischer Texte oder anderer Multibyte-Kodierungen, bei denen bytebasierte Regex-Funktionen wie ereg() (veraltet) oder sogar preg_match() ohne den u-Modifier falsche Ergebnisse liefern könnten.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $pattern Pflicht | string | Der reguläre Ausdruck in POSIX-Extended-Syntax (kein PCRE). Wird in der aktuellen mb_regex_encoding() interpretiert. |
|
| $string Pflicht | string | Der zu durchsuchende Eingabe-String, der in der aktiven Multibyte-Kodierung vorliegen sollte. | |
| $regs | array | null | Wird per Referenz übergeben und nach dem Aufruf mit den gefundenen Teilstrings befüllt. Index 0 ist der vollständige Treffer, ab Index 1 folgen die Capture-Gruppen. |
Rückgabewert
false, wenn kein Treffer gefunden wurde oder ein Fehler aufgetreten ist. Achtung: Wenn der übereinstimmende String leer ist, wird 0 zurückgegeben — daher immer mit === false auf Fehlschlag prüfen, nicht mit == false.Beispiele
Einfacher Multibyte-Regex-Abgleich mit Capture-Gruppe
<?php
mb_regex_encoding('UTF-8');
$string = 'Hallo Welt, schöne neue Welt!';
$pattern = '(Welt)';
$result = mb_ereg($pattern, $string, $matches);
if ($result !== false) {
echo 'Treffer gefunden: ' . $matches[0] . PHP_EOL;
echo 'Capture-Gruppe 1: ' . $matches[1] . PHP_EOL;
echo 'Byte-Länge des Treffers: ' . $result . PHP_EOL;
} else {
echo 'Kein Treffer.' . PHP_EOL;
}
Japanische Zeichen mit UTF-8-Kodierung prüfen
<?php
mb_regex_encoding('UTF-8');
$string = 'これはテストです。';
$pattern = 'テスト';
if (mb_ereg($pattern, $string) !== false) {
echo 'Das Wort "テスト" wurde gefunden.' . PHP_EOL;
} else {
echo 'Kein Treffer.' . PHP_EOL;
}
// Mit Gruppen: Zahlen in gemischtem Text finden
$text = '注文番号: 12345';
if (mb_ereg('([0-9]+)', $text, $regs) !== false) {
echo 'Gefundene Zahl: ' . $regs[1] . PHP_EOL;
}
Korrekte Prüfung auf false vs. leeren Treffer
<?php
mb_regex_encoding('UTF-8');
$string = 'abc';
// Pattern, das einen leeren String matchen kann
$result = mb_ereg('x*', $string, $matches);
// Wichtig: === false verwenden, nicht == false (da 0 auch falsy ist)
if ($result === false) {
echo 'Kein Treffer.' . PHP_EOL;
} else {
echo 'Treffer (Byte-Länge: ' . $result . '): "' . $matches[0] . '"' . PHP_EOL;
}
// Wichtig · Fallstricke
Deprecation: Ab PHP 8.0 ist mb_ereg() offiziell nicht mehr als veraltet markiert, jedoch wird in vielen Projekten der Wechsel zu preg_match() mit dem u-Modifier (/pattern/u) empfohlen, da PCRE-Funktionen weiter verbreitet, besser dokumentiert und leistungsfähiger sind.
Rückgabewert-Falle: Die Funktion gibt bei einem leeren Treffer 0 zurück, was im booleschen Kontext false entspricht. Deshalb immer mit striktem Vergleich === false auf Fehlschlag testen.
Syntax-Unterschied: Das Pattern verwendet POSIX-Extended-Regex, nicht PCRE. Trennzeichen wie / werden nicht benötigt, Modifier wie i oder s werden stattdessen über mb_regex_set_options() gesetzt.
Kodierung: Es wird dringend empfohlen, vor dem Aufruf die Kodierung explizit mit mb_regex_encoding('UTF-8') zu setzen, um unerwartetes Verhalten durch abweichende globale Einstellungen zu vermeiden.