Bug #185
offen[Bugsink] ErrorException: Warning: preg_match(): Unknown modifier '('
0%
Beschreibung
Bugsink: https://bugsink.cytrus.de/issues/issue/59e45eec-0ca7-42ff-8eb6-6b74a7367c04/event/last/
Typ: NEW issue
Projekt: www-verl-de
Bugsink Alert
ErrorException: Warning: preg_match(): Unknown modifier '('
Automatisch erstellt durch n8n
KI-Analyse:
Absolut, hier ist die präzise Analyse aus Sicht eines Senior TYPO3/PHP Entwicklers.
1. Ursache identifizieren¶
Der Fehler Warning: preg_match(): Unknown modifier '(' ist ein klassischer PHP-Fehler, der auftritt, wenn ein regulärer Ausdruck (RegEx) falsch formatiert ist.
-
Das Problem: PHP interpretiert das erste Zeichen nach dem Trenner (z.B.
/,#,~) deines regulären Ausdrucks als sogenannten "Modifier" (z.B.ifür case-insensitive,mfür multiline). Ein(ist kein gültiger Modifier. -
Die typische Fehlquelle: Dies passiert, wenn der Entwickler einen regulären Ausdruck versehentlich nicht korrekt gequoted hat. Die Syntax
preg_match('^(some_pattern)$', ...)ist falsch, da die runde Klammer(als Modifikator gelesen wird. -
Die korrekte Syntax: Der gesamte reguläre Ausdruck muss in einen delimiter (z.B.
/) eingehüllt werden:preg_match('/^(some_pattern)$/', ...).
Die Auslöser können vielfältig sein:
- Ein Tippfehler im Code deiner Extension.
- Ein fehlerhafter regulärer Ausdruck, der aus einer Konfigurationsdatei oder der Datenbank gelesen wird.
- Ein Problem mit einer PHP-Version, die einen bestimmten PCRE-Modifikator nicht unterstützt (sehr selten, aber möglich).
2. Fix beschreiben (konkret)¶
Der Fix ist direkt und konkret. Du musst den Aufruf der preg_match()-Funktion in deinem Code finden und die Syntax des regulären Ausdrucks korrigieren.
Beispiel für den Fehler:
// FEHLERHAFTER CODE
// Das '(' nach dem String-Trenner "'" wird als Modifikator interpretiert.
$result = preg_match('^(some_pattern)$', $input);
Die Korrektur:
// KORRIGIERTER CODE
// Der gesamte RegEx ist nun korrekt zwischen Delimitern (hier '/') eingeschlossen.
$result = preg_match('/^(some_pattern)$/', $input);
Schritte zur Behebung:
- Durchsuche deinen Code (und den deiner installierten Extensions) nach Aufrufen von
preg_match,preg_match_all,preg_replace, etc. - Prüfe den jeweiligen regulären Ausdruck auf die korrekte Syntax. Achte besonders auf die Einrahmung mit einem einheitlichen Delimiter (
/,#,~). - Verwende zur Validierung einen Online-RegEx-Tester, um sicherzustellen, dass dein Muster syntaktisch korrekt ist.
- Aktiviere den PHP Debug Mode (z.B.
display_errors = 1in derphp.ini), um genau die Datei und die Zeile des Fehlers zu sehen, falls der Stacktrace nicht ausreicht.
3. Betroffene TYPO3 Extension nennen¶
Der Stacktrace zeigt, dass der Fehler nicht im TYPO3-Kern (vendor/typo3/cms-core/) sondern in deinem Projekt-Code ausgelöst wird, vermutlich in der Datei /public/index.php oder einem Aufruf daraus.
Konkrete Vermutung: Der Fehler ist am wahrscheinlichsten in einer eigenen, kundenspezifischen Extension oder einer Drittanbieter-Extension zu finden, die einen fehlerhaften regulären Ausdruck verwendet. Der Kern von TYPO3 ist hier sehr stabil und solche Fehler treten in Extensions auf, die z.B. URL-Routing, SEO-Optimierung oder spezielle Felder implementieren.
4. Confidence (0-100%)¶
Confidence: 95%
Begründung:
- 95% für die Ursache und den Fix: Die Error-Meldung ist eindeutig und die Lösung ist standardisiert für diesen PHP-Fehler.
- Die einzige Unsicherheit ist die genaue Quelle des fehlerhaften RegEx (welche Extension), was sich ohne direkten Code-Zugriff nicht zu 100% bestimmen lässt. Die Analyse des Stacktraces zeigt jedoch klar, dass der Fehler im Anwendungskode und nicht im TYPO3-Kern liegt.
Nichts anzuzeigen