"preg_match(): Compilation failed: unmatched Klammern" in PHP für gültige Muster
Frage mich, ob jemand da draußen kann etwas Licht auf, warum der folgende reguläre Ausdruck ist zu Versagen, wenn verwendet in der PHP preg_match-Funktion:-
<?php
$str = '\tmp\phpDC1C.tmp';
preg_match('|\\tmp\\([A-Za-z0-9]+)|', $str, $matches);
print_r($matches);
?>
Diese Ergebnisse in der Fehlermeldung "preg_match(): Compilation failed: unmatched Klammern" trotz der Tatsache, dass das Muster scheint gültig zu sein. Ich habe es getestet mit einem online - PHP-Regular Expression tester und das Linux-tool Kiki. Scheint, wie PHP ist die Flucht vor die öffnende Klammer ein, anstatt den umgekehrten Schrägstrich.
Habe ich Runde das Problem mit str_replace ersetzen Sie die backslashes zu forward-ones. Dies funktioniert für meine situation, aber es wäre schön zu wissen, warum dieser reguläre Ausdruck nicht.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Zum codieren eines literalen backslash, müssen Sie entkommen, es zweimal: Einmal für den string, und einmal für die regex-engine:
In PHP (bei Verwendung von single-quoted strings), ist dies nur relevant für die tatsächlichen Schrägstriche; andere regex-entweicht dann mit einem einzelnen backslash:
Dieser bedeckt ist das Handbuch (siehe das Feld "Hinweis:" oben auf der Seite).
sed /\\\\\\\/\\\\\\\\\/
oder etwas zu diesem Effekt.verwenden Sie
|\\\tmp\\\([A-Za-z0-9]+)|
Ausdruckaber es gibt einen besseren Weg, um Datei-Namen, weil von der konkreten form-string. zum Beispiel:
denken Sie über die memory Auslastung
seltsam, ich habe gerade getestet mit dem gleichen online-regex-tester, die Sie erwähnt, und es kompiliert ohne Fehler :
Verwenden Sie die nächste regex: