doppelte Maskierung des Backslashes in einem regulärem Ausdruck
Christopher
- php
-1 Cheatah0 Tom
0 Christian Kruse
Hallo zusammen!
Ich lese gerade ein Buch über PHP und behandle die regulären Ausdrücke. Dabei tritt einmal der Backslash als eigenes Zeichen auf, dennoch wird er doppelt maskiert "/\/". Wieso verhält es sich so?
Hi,
Ich lese gerade ein Buch über PHP und behandle die regulären Ausdrücke. Dabei tritt einmal der Backslash als eigenes Zeichen auf, dennoch wird er doppelt maskiert "/\/". Wieso verhält es sich so?
weil in PHP Regular Expressions zusätzlich in einem String stehen, also die handelsüblichen String-Regeln Gültigkeit haben.
Cheatah
Hello,
Ich lese gerade ein Buch über PHP und behandle die regulären Ausdrücke. Dabei tritt einmal der Backslash als eigenes Zeichen auf, dennoch wird er doppelt maskiert "/\/". Wieso verhält es sich so?
weil in PHP Regular Expressions zusätzlich in einem String stehen, also die handelsüblichen String-Regeln Gültigkeit haben.
Müssten es dann nicht vier Slashes sein, um einen durchzubringen?
Harzliche Grüße aus http://www.annerschbarrich.de
Tom
Hallo du da draußen,
Müssten es dann nicht vier Slashes sein, um einen durchzubringen?
Müssten schon, aber / (nein, das ist kein V!) erzeugt ja trotzdem /, da es ja kein Zeichen ist, das man „escapen könnte“…
In sofern sind drei Slashes auch möglich – wie du schätzungsweise weißt. ;-)
Grüße von hier drinnen, aus Biberach an der Riss,
Candid Dauth (Dogfish)
你好 Christopher,
Ich lese gerade ein Buch über PHP und behandle die regulären Ausdrücke.
Dabei tritt einmal der Backslash als eigenes Zeichen auf, dennoch wird er
[...]
Du musst verstehen, wie PHP funktioniert. Die regulaeren Ausdruecke sind in
PHP durch die ereg_*- und preg_*-Funktionen implementiert, die Argumente
erwarten. Und da es fuer regulaere Ausdruecke keine extra Sprachmittel gibt
muss der Ausdruck als String uebergeben werden. Der String wird auch
entsprechend der Regeln interpretiert: aus "\" wird programm-intern "".
Das heisst, wenn du preg_match("/\/",$var) schreibst, dann kommt bei der
RegEx-Engine, als dem Stueck Programm, dass die regulaeren Ausdruecke
auswertet, nur ein Backslash an (). Und da ein Backslash fuer die
RegEx-Engine eine besondere Bedeutung hat (er maskiert naemlich das darauf
folgende Zeichen) musst du ihn auch fuer die Engine deaktivieren, indem du
ihn mit einem vorangestellten RegEx maskierst. Im Klartext: wenn du in
PHP preg_match("/\\",$var) schreibst, dann kommt bei der RegEx-Engine
\ an, weil aus "\\" nach dem Interpretieren des Strings nur ein doppelter
Backslash wird.
doppelt maskiert "/\/". Wieso verhält es sich so?
Eigentlich muesstest du sogar "/\\/" schreiben :)
再见,
CK