"preg_match (): Kompilierung fehlgeschlagen: nicht übereinstimmende Klammern" in PHP für gültiges Muster

8

Ich frage mich, ob irgendjemand da draußen etwas Licht in die Frage bringen kann, warum der folgende reguläre Ausdruck fehlschlägt, wenn er in der preg_match-Funktion von PHP verwendet wird: -

%Vor%

Dies führt zu der Fehlermeldung "preg_match (): Kompilierung fehlgeschlagen: nicht übereinstimmende Klammern" trotz der Tatsache, dass das Muster gültig scheint. Ich habe es mit einem PHP Regular Expression Tester und dem Linux Tool Kiki getestet. Scheint so, als würde PHP die öffnende Klammer und nicht den umgekehrten Schrägstrich verlassen.

Ich habe das Problem durch Verwendung von str_replace gelöst, um die umgekehrten Schrägstriche gegen die vorderen zu tauschen. Dies funktioniert für meine Situation, aber es wäre nett zu wissen, warum dieser reguläre Ausdruck fehlschlägt.

    
drmonkeyninja 30.04.2012, 13:51
quelle

4 Antworten

15

Um einen umgekehrten Schrägstrich zu codieren, müssen Sie ihn zweimal entschlüsseln: Einmal für die Zeichenfolge und einmal für die Regex-Engine:

%Vor%

In PHP (bei Strings mit einfachen Anführungszeichen) ist dies nur für tatsächliche Backslashes relevant; Andere Regex-Escapes sind in Ordnung mit einem einzelnen Backslash:

%Vor%

Dies ist in dem Handbuch beschrieben (siehe Kasten "Hinweis:" oben auf der Seite).

    
Tim Pietzcker 30.04.2012, 13:55
quelle
1

Sie müssen |\\tmp\\([A-Za-z0-9]+)| expression

verwenden

aber es gibt bessere Möglichkeit, Dateinamen wegen der konkreten Form der Schnur zu erhalten. zum Beispiel:

%Vor%

Denken Sie über die Speichernutzung nach

    
miro 30.04.2012 14:01
quelle
0

seltsam Ich habe gerade mit dem gleichen Online-Regex-Tester getestet, die Sie erwähnt und es kompiliert ohne Fehler:

%Vor%     
Satya 30.04.2012 13:56
quelle
0

Benutze die nächste Regex:

%Vor%     
Yago Riveiro 30.04.2012 14:24
quelle

Tags und Links