Start · Sprachen · PHP · Referenz · mb_ereg_search

mb_ereg_search

Funktion

Führt einen Multibyte-Regex-Abgleich auf dem zuvor mit <code>mb_ereg_search_init()</code> festgelegten String durch und gibt <code>true</code> bei einem Treffer zurück.

seit PHP 4.2.0 Kategorie: string

Signatur

mb_ereg_search(string $pattern = null, string $flags = null): bool

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

Typ
bool
Beschreibung
Gibt 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;
}
Treffer gefunden! Aktuelle Position: 27

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;
Treffer #1: 'Apfel' an Position 5 Treffer #2: 'Apfel' an Position 20 Treffer #3: 'Apfel' an Position 35 Gesamt gefunden: 3

// 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.