Signatur
Beschreibung
mb_ereg_search() ist Teil der Multibyte-Suchmaschinerie in PHP und arbeitet immer auf dem String, der zuvor über mb_ereg_search_init() gesetzt wurde. Die Funktion führt die eigentliche Suche durch und merkt sich die aktuelle Position im String, sodass nachfolgende Aufrufe von mb_ereg_search() oder mb_ereg_search_pos() die Suche nahtlos fortsetzen können.
Der optionale Parameter pattern erlaubt es, den regulären Ausdruck für diesen Suchvorgang zu überschreiben, ohne mb_ereg_search_init() erneut aufrufen zu müssen. Wird kein pattern übergeben, wird das zuletzt bei mb_ereg_search_init() gesetzte Muster verwendet. Mit dem Parameter flags lassen sich Optionen wie Groß-/Kleinschreibungsignorierung steuern.
Die Funktion ist besonders nützlich beim iterativen Durchsuchen eines langen Multibyte-Strings (z. B. in japanischem, chinesischem oder arabischem Text), da der interne Suchzeiger automatisch nach jedem Treffer weiterrückt und so eine Schleife über alle Vorkommen möglich macht. Mit mb_ereg_search_regs() lassen sich die gefundenen Teile extrahieren.
Die Funktion arbeitet mit dem Zeichensatz, der über mb_regex_encoding() eingestellt wurde. Standardmäßig wird die interne Encoding-Einstellung verwendet.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $pattern | string|null | null | Der reguläre Ausdruck (Multibyte-Regex) für die Suche. Wird null übergeben oder weggelassen, verwendet die Funktion das zuletzt bei mb_ereg_search_init() gesetzte Muster. |
| $flags | string|null | null | Optionale Suchoptionen als Zeichenkette, z. B. 'i' für Groß-/Kleinschreibungsignorierung. Wird null übergeben, gelten die bei mb_ereg_search_init() gesetzten Flags. |
Rückgabewert
true zurück, wenn das Muster im vordefinierten String gefunden wurde, andernfalls false. Gibt ebenfalls false zurück, wenn kein String mit mb_ereg_search_init() initialisiert wurde.Beispiele
Einfache Multibyte-Suche in einem String
<?php
// Zeichensatz auf UTF-8 setzen
mb_regex_encoding('UTF-8');
$text = 'PHP ist eine großartige Sprache für Webentwicklung.';
// String und optionales Muster initialisieren
mb_ereg_search_init($text, 'großartig');
if (mb_ereg_search()) {
$pos = mb_ereg_search_getpos();
echo "Treffer gefunden! Aktuelle Position: " . $pos . PHP_EOL;
} else {
echo "Kein Treffer." . PHP_EOL;
}
Iteratives Durchsuchen eines Strings nach mehreren Vorkommen
<?php
mb_regex_encoding('UTF-8');
$text = 'Apfel, Birne, Apfel, Kirsche, Apfel';
// Initialisierung mit Muster
mb_ereg_search_init($text, 'Apfel');
$count = 0;
while (mb_ereg_search()) {
$count++;
$regs = mb_ereg_search_regs();
echo "Treffer #{$count}: '" . $regs[0] . "' an Position " . mb_ereg_search_getpos() . PHP_EOL;
}
echo "Gesamt gefunden: {$count}" . PHP_EOL;
// Wichtig · Fallstricke
Achtung: mb_ereg_search() nutzt eine globale interne Position, die durch mb_ereg_search_init() oder mb_ereg_search_setpos() gesetzt wird. Bei gleichzeitiger Verwendung in verschachtelten Kontexten oder parallelen Abläufen kann es zu unerwarteten Ergebnissen kommen, da der Zustand global ist.
Die Funktion gehört zur mbregex-Erweiterung, die auf der Oniguruma-Bibliothek basiert. Die Syntax der regulären Ausdrücke unterscheidet sich leicht von PCRE (preg_*-Funktionen). Für neue Projekte kann preg_match() mit dem u-Modifier (Unicode) eine modernere Alternative darstellen.
Falls mb_ereg_search_init() vor mb_ereg_search() nicht aufgerufen wurde, gibt die Funktion false zurück und erzeugt eine Warnung.