Signatur
Beschreibung
mb_ereg_search_getpos() liefert den aktuellen Byte-Offset, ab dem der nächste Aufruf von mb_ereg_search() die Suche im zuvor mit mb_ereg_search_init() gesetzten Such-String beginnt. Jeder erfolgreiche Treffer durch mb_ereg_search() rückt diese interne Position automatisch weiter vor.
Die Funktion ist besonders nützlich, wenn man innerhalb eines langen Strings iterativ nach mehreren Treffern sucht und wissen möchte, wie weit der Abgleich bereits fortgeschritten ist – zum Beispiel um die verbleibenden Zeichen zu verarbeiten oder die Position protokollieren zu wollen.
Die zurückgegebene Position ist ein Byte-Offset, kein Zeichen-Offset. Bei Multibyte-Encodings wie UTF-8 kann der Byte-Offset von der Zeichen-Position abweichen. Die interne Suchposition lässt sich mit mb_ereg_search_setpos() manuell zurücksetzen oder an eine beliebige Stelle setzen.
Beachte, dass mb_ereg_search_init() aufgerufen werden muss, bevor diese Funktion sinnvoll verwendet werden kann. Ohne vorherige Initialisierung ist das Verhalten undefiniert.
Rückgabewert
int zurück, ab dem der nächste reguläre Ausdruck-Abgleich im Such-String beginnt.Beispiele
Iterative Suche mit Positions-Ausgabe
<?php
$string = 'Apfel, Birne, Kirsche, Pflaume';
mb_ereg_search_init($string, '[A-ZÄÖÜ][a-zäöü]+');
while (mb_ereg_search()) {
$pos = mb_ereg_search_getpos();
$result = mb_ereg_search_getregs();
echo 'Gefunden: ' . $result[0] . ' | Nächste Suchposition (Byte): ' . $pos . PHP_EOL;
}
Position speichern und Suche an einem bestimmten Punkt fortsetzen
<?php
$string = 'foo123bar456baz789';
mb_ereg_search_init($string, '[0-9]+');
// Ersten Treffer suchen
if (mb_ereg_search()) {
$regs = mb_ereg_search_getregs();
echo 'Erster Treffer: ' . $regs[0] . PHP_EOL;
$savedPos = mb_ereg_search_getpos();
echo 'Aktuelle Position nach erstem Treffer: ' . $savedPos . PHP_EOL;
}
// Manuell zur gespeicherten Position springen und weitersuchen
mb_ereg_search_setpos($savedPos);
if (mb_ereg_search()) {
$regs = mb_ereg_search_getregs();
echo 'Zweiter Treffer: ' . $regs[0] . PHP_EOL;
echo 'Aktuelle Position: ' . mb_ereg_search_getpos() . PHP_EOL;
}
// Wichtig · Fallstricke
Byte- vs. Zeichen-Offset: Der Rückgabewert ist ein Byte-Offset. Bei Multibyte-Encodings wie UTF-8 entspricht er nicht zwingend der Anzahl der Zeichen. Soll auf Zeichenebene gearbeitet werden, muss der Offset entsprechend umgerechnet werden (z. B. mit mb_strlen() auf dem Teilstring).
Deprecated-Hinweis: Die mb_ereg_*-Funktionen basieren auf der POSIX-Erweiterungs-Bibliothek Oniguruma und gelten als veraltet. Für neue Projekte wird empfohlen, preg_*-Funktionen mit dem Modifier u (Unicode) zu verwenden, da diese moderner, leistungsfähiger und besser gewartet sind.