Christopher: doppelte Maskierung des Backslashes in einem regulärem Ausdruck

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?

  1. 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

    --
    X-Self-Code: sh:( fo:} ch:~ rl:° br:> n4:& ie:% mo:) va:) de:] zu:) fl:{ ss:) ls:~ js:|
    X-Self-Code-Url: http://emmanuel.dammerer.at/selfcode.html
    X-Will-Answer-Email: No
    X-Please-Search-Archive-First: Absolutely Yes
    1. 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

      --
      Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
      Nur selber lernen macht schlau
      1. 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)

        --
        »Bismarck biss Mark, bis Mark Bismarck biss!«
        http://cdauth.net.tc/
        ie:{ fl:( br: va:} ls:[ fo:| rl:( n4:( ss:) de:> js:( ch:| sh:( mo:) zu:|
  2. 你好 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

    --
    lim(3->4)(sqrt(3)) = 2
    http://wwwtech.de/