Start · Sprachen · PHP · Referenz · mb_ereg_search_pos

mb_ereg_search_pos

Funktion

Sucht im vordefinierten Multibyte-String nach einem regulären Ausdruck und gibt Position sowie Länge des Treffers zurück.

seit PHP 4.2.0 Kategorie: string

Signatur

mb_ereg_search_pos(string $pattern = '', string $option = 'ms'): array|false

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

Typ
array|false
Beschreibung
Gibt ein numerisch indiziertes Array zurück: Index 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;
}
Treffer bei Position: 12, Länge: 5

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;
}
Treffer bei Position: 0, Länge: 5 Treffer bei Position: 13, Länge: 5 Treffer bei Position: 26, Länge: 5

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;
}
Gefunden an Zeichenposition: 0, Länge: 4 Gefunden an Zeichenposition: 17, Länge: 4

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