Start · Sprachen · PHP · Referenz · mb_ereg_search_regs

mb_ereg_search_regs

Funktion

Führt eine Multibyte-Regex-Suche durch und gibt die Treffer (Gesamttreffer + Untergruppen) als Array zurück.

seit PHP 4.2.0 Kategorie: string

Signatur

mb_ereg_search_regs(string $pattern = '', string $option = 'msr'): array|false

Beschreibung

mb_ereg_search_regs() durchsucht eine zuvor mit mb_ereg_search_init() registrierte Zeichenkette nach dem angegebenen regulären Ausdruck und gibt ein Array zurück, das den gesamten Treffer an Index 0 sowie alle Capturing-Gruppen an den folgenden Indizes enthält – analog zu mb_ereg(), jedoch mit Zustandsverwaltung für iterative Suchen.

Die Funktion arbeitet stets auf der internen Suchposition, die durch vorherige Aufrufe von mb_ereg_search(), mb_ereg_search_pos() oder mb_ereg_search_regs() vorgerückt wurde. Dadurch lässt sich eine Zeichenkette schrittweise durchlaufen, ohne sie manuell aufzuteilen.

Das pattern-Argument ist optional: Wird es weggelassen, verwendet die Funktion das zuletzt mit mb_ereg_search_init() registrierte Muster. Die Zeichenkodierung richtet sich nach der aktuell aktiven internen Kodierung (mb_internal_encoding()), sofern nicht anders konfiguriert.

Typische Einsatzgebiete sind das Tokenisieren von Multibyte-Texten (z. B. Japanisch, Chinesisch) sowie das schrittweise Extrahieren strukturierter Daten aus Unicode-Zeichenketten, bei denen herkömmliche PCRE-Funktionen an Grenzen stoßen können.

Parameter

Name Typ Default Beschreibung
$pattern string Der reguläre Ausdruck im ERE-Format (Extended Regular Expression). Wird kein Muster angegeben, wird das zuletzt via mb_ereg_search_init() gesetzte Muster verwendet.
$option string msr Optionen für das Regex-Matching. Mögliche Zeichen: i (Groß-/Kleinschreibung ignorieren), x (erweiterte Syntax), m (mehrzeiliger Modus), s (. trifft auch Zeilenumbrüche), r (Suchposition nach Treffer vorwärts setzen).

Rückgabewert

Typ
array|false
Beschreibung
Ein indiziertes Array, bei dem Index 0 den vollständigen Treffer enthält und jeder weitere Index einer Capturing-Gruppe entspricht. Gibt false zurück, wenn kein Treffer gefunden wurde oder kein Suchstring initialisiert wurde.

Beispiele

Einfache Suche mit Capturing-Gruppe

<?php
mb_internal_encoding('UTF-8');

$text = '日付: 2024-03-15、次: 2024-04-01';
mb_ereg_search_init($text, '([0-9]{4})-([0-9]{2})-([0-9]{2})');

while ($regs = mb_ereg_search_regs()) {
    echo '全体: ' . $regs[0] . PHP_EOL;
    echo '年: '   . $regs[1] . ', 月: ' . $regs[2] . ', 日: ' . $regs[3] . PHP_EOL;
}
全体: 2024-03-15 年: 2024, 月: 03, 日: 15 全体: 2024-04-01 年: 2024, 月: 04, 日: 01

Muster direkt beim Aufruf übergeben

<?php
mb_internal_encoding('UTF-8');

$html = '<b>Fett</b> und <i>kursiv</i>';
mb_ereg_search_init($html);

if ($regs = mb_ereg_search_regs('<([a-z]+)>([^<]*)</[a-z]+>')) {
    echo 'Tag: '   . $regs[1] . PHP_EOL; // b
    echo 'Inhalt: ' . $regs[2] . PHP_EOL; // Fett
}

// Nächsten Treffer holen
if ($regs = mb_ereg_search_regs()) {
    echo 'Tag: '   . $regs[1] . PHP_EOL; // i
    echo 'Inhalt: ' . $regs[2] . PHP_EOL; // kursiv
}
Tag: b Inhalt: Fett Tag: i Inhalt: kursiv

// Wichtig · Fallstricke

Zustandsbehaftet: Die Funktion arbeitet mit einem globalen internen Zustand. Bei nebenläufigen oder rekursiven Aufrufen (z. B. in verschachtelten Schleifen) muss der Zustand durch erneuten Aufruf von mb_ereg_search_init() zurückgesetzt werden, da sonst unerwartete Ergebnisse entstehen.

Kodierung: Stellen Sie sicher, dass mb_internal_encoding() auf die korrekte Kodierung des Eingabestrings gesetzt ist. Eine falsch gesetzte Kodierung kann zu fehlerhaften Treffern oder Abstürzen führen.

Deprecation-Hinweis: Die mb_ereg_*-Funktionen nutzen die Oniguruma-Bibliothek im ERE-Modus. Für neue Projekte empfiehlt sich in vielen Fällen der Einsatz von PCRE-Funktionen (preg_match() mit dem u-Modifier), da diese weiter verbreitet und besser dokumentiert sind.