Start · Sprachen · PHP · Referenz · mb_eregi

mb_eregi

Funktion

Führt einen regulären Ausdrucks-Abgleich auf einem Multibyte-String durch, ohne Groß-/Kleinschreibung zu berücksichtigen.

seit PHP 4.2.0 Kategorie: string

Signatur

mb_eregi(string $pattern, string $string, array &$regs = null): int|false

Beschreibung

mb_eregi() gleicht den Multibyte-String $string gegen den regulären Ausdruck $pattern ab, ohne dabei zwischen Groß- und Kleinschreibung zu unterscheiden. Die Funktion unterstützt Multibyte-Zeichenkodierungen und ist damit für Sprachen wie Japanisch, Chinesisch oder andere Nicht-ASCII-Sprachen geeignet.

Wird der optionale Parameter $regs angegeben, so wird er mit dem vollständigen Treffer sowie allen Teiltreffern (Capture Groups) befüllt — ähnlich wie preg_match() mit dem $matches-Parameter. $regs[0] enthält den vollständigen Treffer, $regs[1] den ersten Teilausdruck usw.

Die Funktion arbeitet mit der intern eingestellten Multibyte-Kodierung (standardmäßig die durch mb_internal_encoding() gesetzte Kodierung). Da mb_eregi() auf der veralteten POSIX-ERE-Syntax (Extended Regular Expressions) basiert und nicht die mächtigere PCRE-Syntax verwendet, wird für neue Projekte die Nutzung von preg_match() mit dem /i-Modifier und /u-Flag empfohlen.

Achtung: Diese Funktion ist seit PHP 7.3.0 als veraltet (deprecated) markiert und wurde in PHP 8.0.0 entfernt. In modernem PHP-Code sollte stattdessen preg_match() verwendet werden.

Parameter

Name Typ Default Beschreibung
$pattern Pflicht string Der reguläre Ausdruck im POSIX-ERE-Format. Groß-/Kleinschreibung wird beim Abgleich ignoriert.
$string Pflicht string Der zu durchsuchende Multibyte-String.
$regs array null Optionale Referenz auf ein Array. Wenn angegeben, wird es mit dem vollständigen Treffer ($regs[0]) und allen Teiltreffern befüllt.

Rückgabewert

Typ
int|false
Beschreibung
Gibt die Länge des gefundenen Treffers (in Bytes) zurück, wenn der Ausdruck übereinstimmt, oder false, wenn keine Übereinstimmung gefunden wurde. Wenn $regs nicht angegeben wurde und eine Übereinstimmung vorliegt, wird 1 zurückgegeben.

Beispiele

Einfacher Groß-/Kleinschreibung-unabhängiger Abgleich

<?php
// Einfacher Abgleich ohne Berücksichtigung der Groß-/Kleinschreibung
$string = 'Hallo Welt';
if (mb_eregi('hallo', $string)) {
    echo 'Treffer gefunden!';
} else {
    echo 'Kein Treffer.';
}
Treffer gefunden!

Abgleich mit Capture Groups

<?php
// Teilausdrücke (Capture Groups) erfassen
$string = 'Benutzer: Max Mustermann';
if (mb_eregi('Benutzer: ([A-Za-z]+) ([A-Za-z]+)', $string, $regs)) {
    echo 'Vollständiger Treffer: ' . $regs[0] . "\n";
    echo 'Vorname: ' . $regs[1] . "\n";
    echo 'Nachname: ' . $regs[2] . "\n";
}
Vollständiger Treffer: Benutzer: Max Mustermann Vorname: Max Nachname: Mustermann

Modernes Äquivalent mit preg_match (empfohlen)

<?php
// Empfohlene Alternative ab PHP 7.3+
$string = 'Hallo Welt';
if (preg_match('/hallo/iu', $string)) {
    echo 'Treffer gefunden (mit PCRE und Unicode-Unterstützung)!';
}
Treffer gefunden (mit PCRE und Unicode-Unterstützung)!

// Wichtig · Fallstricke

Deprecation: mb_eregi() ist seit PHP 7.3.0 als veraltet markiert (E_DEPRECATED) und wurde in PHP 8.0.0 vollständig entfernt. Code, der diese Funktion verwendet, muss für PHP 8+ auf preg_match() mit den Flags /i (case-insensitive) und /u (UTF-8/Unicode) umgestellt werden.

Die Funktion basiert auf POSIX Extended Regular Expressions (ERE), die weniger leistungsfähig sind als PCRE. Unter anderem fehlen Nicht-Gierig-Quantoren (*?, +?), Lookahead/Lookbehind-Assertions und benannte Capture Groups.

Die verwendete Multibyte-Kodierung wird durch mb_regex_encoding() gesteuert, nicht durch mb_internal_encoding(). Wer sicherstellen möchte, dass die richtige Kodierung verwendet wird, sollte mb_regex_encoding('UTF-8') explizit setzen.