[REGEX] Backreferences spinnen... oder ich!

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • [REGEX] Backreferences spinnen... oder ich!

    Moinsen,
    Ich hab folgendes Problem (es geht um BB-Code) mit diesem RegExp:
    PHP-Code:
       $search '!(\\[MAIL\\])(.*)(\\[\\/MAIL\\])!i';
       
    $replace '<a href="mailto:\\\\2">\\\\2</a>';
    $text preg_replace($search$replace$text); 
    Nun sollte er ja mit $search alle "[MAIL]foobar[/MAIL]" finden und durch <a href="mailto:foobar">foobar</a> ersetzten....
    Stattdessen enthällt //2 "foobar" inklusive der BB-Tags!


    Könntet ihr mich auf meinen Fehler hinweisen??
    Alleine komm ich da net drauf!
    Die Musikreview Seite

    hi, i'm a signature virus. copy me into your signature to help me spread.

  • #2
    Hi Tartax,

    ich habe das mal bei mir auf einem WAMP-System
    (PHP Version 4.3.3RC2-dev) ausprobiert und dein
    Code:
    PHP-Code:
    <?php

    $text 
    =  "[MAIL]foobar[/MAIL]";
    $search '!(\\[MAIL\\])(.*)(\\[\/MAIL\\])!i';
    $replace '<a href="mailto:\\\\2">\\\\2</a>';
    $text preg_replace($search$replace$text);
    echo 
    $text;

    ?>
    ...funktioniert Einwandfrei, die Ausgabe ist:
    PHP-Code:
    <a href="mailto:foobar">foobar</a
    Kann mir leider nicht erklären warum es bei dir
    nicht funktioniert hat.

    netten Gruß, Holger

    EDIT:

    Habe gerade festgestellt, dass das Board die zweiten
    Backslashes innerhalb des Ersetzungs-Ausdrucks ge-
    fressen hat.



    EDIT:

    Habe nun die Backslashes escaped, jetzt stimmt wieder
    alles...;-)

    Zuletzt geändert von hOk; 08.12.2003, 16:59.

    Kommentar


    • #3
      Sry, war mein Fehler. $text stand schon falsch in der DB!
      Die Musikreview Seite

      hi, i'm a signature virus. copy me into your signature to help me spread.

      Kommentar


      • #4
        Original geschrieben von hOk
        Habe gerade festgestellt, dass das Board die zweiten
        Backslashes innerhalb des Ersetzungs-Ausdrucks ge-
        fressen hat.
        du musst du hier auch noch escapen, dann werden sie richtig dargestellt ...

        oder eben ausnahmsweise ohne php-tags posten.
        INFO: Erst suchen, dann posten![color=red] | [/color]MANUAL(s): PHP | MySQL | HTML/JS/CSS[color=red] | [/color]NICE: GNOME Do | TESTS: Gästebuch[color=red] | [/color]IM: Jabber.org |


        Kommentar


        • #5
          @Tartax:
          macht doch nichts, hauptsache das läuft jetzt

          @Abraxax:
          Super, danke für den Tip, hab es sogar gleich
          korrigiert

          Kommentar


          • #6
            Frage 2:

            Kann ich statt "[^h][^t][^t][^p][^:]"
            auch "[^(http]" schreiben?
            Die Musikreview Seite

            hi, i'm a signature virus. copy me into your signature to help me spread.

            Kommentar


            • #7
              Okay, hat sich erledigt....!

              @ hOk, deine slashes im $search sind immernoch falch :P
              Die Musikreview Seite

              hi, i'm a signature virus. copy me into your signature to help me spread.

              Kommentar


              • #8
                Hehe, habe es noch mal korrigiert, jetzt geht es.

                Nochmal zu deinem Regex, ich habe den gerade
                mal ausprobiert und anscheinend wird es immer
                noch als Gruppe interpretiert sogar wenn man,
                die Klammern escaped.
                Ich vermute fast, dass man Folgen garnicht negieren
                kann, aber weiß auch nicht genau. Habe selber
                sowas immer andersrum aufgezäumt.

                netten Gruß, Holger

                Kommentar

                Lädt...
                X