Das liebe Anführungszeichen

Hi,

war heute mal wieder ein bisschen am PHP programmieren und hab mit RegExen rumgespielt. Ich wollte bestimmte Elemente, die in {$ $} eingschlossen waren (also z.B. {$test$}) finden und durch nichts ersetzen.

Dafür schrieb ich mir das folgende RegEx:

#{\$(.*?)\$}#

An sich ein kleines, schnuckeliges RegEx, was auch tadellos funktioniert, zumindest auf den ersten Blick.

Als PHP-Code sah das ganze zu erst so aus (vereinfacht):

public function replacetags($input) {
  $regex = "#{\$(.*?)\$}#";  	

  return preg_replace($regex, '', $input);
}

Doch hoppla, egal was ich in den Input stopfte, es wurden nie meine {$ $} gelöscht. Zuerst dachte ich, dass es doch an der RegEx lag, weswegen ich es mit dem RegEx-Tool getestet hab, dort funktionierte es allerdings tadellos. Nach langem Probieren habe ich aus den doppelten Anführungszeichen ( ” ) ein einfaches ( ‘ ) gemacht und schwupps, funktionierte alles ohne Probleme.

Ich bin immer noch am Überlegen, warum es mit den doppelten Anführungszeichen nicht funktioniert, wohl aber mit den einfachen. Falls jemand die Lösung weiß oder einen Tipp hat, nur her damit ;-)

Sociallinks:
  • Add to favorites
  • Print
  • PDF
  • email
  • RSS
  • Twitter
  • Google Bookmarks
  • Live
  • Yahoo! Bookmarks
  • del.icio.us
  • Digg
  • Facebook
  • LinkedIn
  • MisterWong
  • MisterWong.DE
  • Mixx
  • MySpace
  • SphereIt
  • Sphinn
  • Technorati
  • Blogosphere News
Dieser Beitrag wurde unter Programmierung abgelegt und mit , , verschlagwortet. Setze ein Lesezeichen auf den Permalink.

5 Antworten auf Das liebe Anführungszeichen

  1. Namenlozer sagt:

    In PHP werden Variablen in doppelten Anführungszeichen ersetzt (wie auch das Highlighting schon zeigt).

    $test = “Welt”;
    echo “Hallo $test”;

    gibt Hallo Welt aus.

  2. Manu sagt:

    Das ist soweit klar, aber im RegEx steckt ja keine Variable drin?

  3. Namenlozer sagt:

    Ja, aber wegen der $-zeichen, denkt PHP, dass es sich um eine (bzw zwei) Variablen handelt. Weil die aber nicht existieren, also “leer sind”, setzt PHP den Inhalt der nicht existierenden Variablen, also gar nichts, ein -> die $ verschwinden.

    PHP ist etwas merkwürdig was die Verwaltung von Variablen und Werten angeht.

    Beispiel:
    if (!$variable) ergibt true, wenn die variable 0, NULL oder ” ist, oder auch wenn sie gar nicht existiert…

  4. Manu sagt:

    Ach natürlich klar. Oh Gott, das hab ich total übersehen, dass er $ als Variable sieht.

    Danke fürs Augenöffnen :)

  5. foobar sagt:

    deshalb nimmt man auch keine $ als deliminatoren :P

Hinterlasse eine Antwort

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind markiert *

*

Du kannst folgende HTML-Tags benutzen: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>