Signatur
Beschreibung
mb_ereg_search_pos() führt eine reguläre Suche im Multibyte-Zeichensatz im vordefinierten Such-String durch und liefert ein Array mit Startposition und Länge des gefundenen Treffers. Der Such-String muss zuvor mit mb_ereg_search_init() initialisiert worden sein.
Im Gegensatz zu mb_ereg_search(), die lediglich true oder false zurückgibt, erlaubt mb_ereg_search_pos() die genaue Positionsbestimmung des Treffers innerhalb des Strings – hilfreich, wenn z. B. Tokens aus einem Text extrahiert oder Positionen für eine weitere Verarbeitung benötigt werden.
Die Suche beginnt jeweils an der zuletzt gefundenen Position (Suchzeiger), die nach jedem Treffer automatisch weitergesetzt wird. Mit mb_ereg_search_setpos() kann der Suchzeiger manuell zurückgesetzt oder verschoben werden. Alle Positionen beziehen sich auf Multibyte-Zeichen, nicht auf Bytes.
Der optionale Parameter $pattern kann ein neues Muster angeben; wird er weggelassen, wird das zuletzt mit mb_ereg_search_init() oder einer vorigen Suche verwendete Muster erneut genutzt.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $pattern | string | Das reguläre Multibyte-Suchmuster (Oniguruma-Syntax). Wird kein Muster angegeben, wird das zuletzt verwendete Muster wiederverwendet. | |
| $option | string | ms | Suchoptionen als String, z. B. 'i' für Groß-/Kleinschreibung ignorieren, 'm' für Mehrzeilenmodus, 's' für Single-Line-Modus. |
Rückgabewert
0 enthält die Startposition (in Zeichen) des Treffers, Index 1 enthält die Länge (in Zeichen) des Treffers. Wird kein Treffer gefunden oder wurde kein Such-String initialisiert, wird false zurückgegeben.Beispiele
Einfache Positionssuche in einem Multibyte-String
<?php
mb_internal_encoding('UTF-8');
$text = 'Hallo Welt, hallo PHP!';
mb_ereg_search_init($text, 'hallo');
$pos = mb_ereg_search_pos();
if ($pos !== false) {
echo "Treffer bei Position: " . $pos[0] . ", Länge: " . $pos[1] . PHP_EOL;
} else {
echo "Kein Treffer gefunden." . PHP_EOL;
}
Mehrere Treffer iterativ im Multibyte-String finden
<?php
mb_internal_encoding('UTF-8');
$text = 'Katze, Maus, Katze, Hund, Katze';
mb_ereg_search_init($text, 'Katze');
while (($pos = mb_ereg_search_pos()) !== false) {
echo "Treffer bei Position: " . $pos[0] . ", Länge: " . $pos[1] . PHP_EOL;
}
Suche in UTF-8-String mit Umlauten
<?php
mb_internal_encoding('UTF-8');
$text = 'Über den Wolken, über den Träumen';
mb_ereg_search_init($text, 'über', 'i');
while (($pos = mb_ereg_search_pos('über', 'i')) !== false) {
echo "Gefunden an Zeichenposition: " . $pos[0] . ", Länge: " . $pos[1] . PHP_EOL;
}
// Wichtig · Fallstricke
Wichtig: Bevor mb_ereg_search_pos() aufgerufen werden kann, muss der Such-String zwingend mit mb_ereg_search_init() initialisiert worden sein – andernfalls wird false zurückgegeben.
Die zurückgegebenen Positions- und Längenwerte beziehen sich auf Multibyte-Zeichen (nicht auf Bytes). Bei Strings mit Multi-Byte-Zeichen (z. B. UTF-8 mit Umlauten) weichen diese Werte daher von den entsprechenden Byte-Positionen ab.
Die Funktionsfamilie mb_ereg_* nutzt die Oniguruma-Bibliothek für reguläre Ausdrücke. Ab PHP 7.1 wird die interne Zeichenkodierung für diese Funktionen strenger beachtet – es empfiehlt sich, mb_internal_encoding() explizit zu setzen.
Ab PHP 8.0 wird ein leerer $pattern-String nicht mehr wie weggelassen behandelt – es sollte dann explizit kein Argument oder der eigentliche Muster-String übergeben werden.