Regex will nicht

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

  • Regex will nicht

    Hallo,

    folgende Situation: ich habe diesen WYSIWYG-Editor, den der IE unterstützt (div CONENTEDITABLE). Da kann man auch Bilder einfügen. Jetzt soll das ganze aber als CMS benutzt werden -> Es können nur Bilder verwendet werden, die schon auf dem Server liegen.

    Wenn ich jetzt den Quelltext, den der Editor erstellt in der DB speichere, steht da logischerweise bei den Bildern mein lokaler Pfad drin und eben nicht der Pfad auf dem Server. Daher möchte ich folgendes:

    Code:
    <img src="D:\Ordner\Ordner\sub\datei.gif">
    soll ersetzt werden durch

    Code:
    <img src="../images/datei.gif">
    Mit regex sollte das ja kein Problem sein. Folgenden Code habe ich:

    PHP-Code:
    $Quelltext eregi_replace('/^(src=\")(.*)(\/\.(gif|jpg))$/','images',$Quelltext); 
    Der funktioniert aber leider nicht.

    - Wo ist mein Denkfehler?
    - gibt es Programme, mit denen ich meine regex testen kann, ohne die dauernd auf den Server laden zu müssen?

    Danke für eure Antwort(en)

    strauberry

  • #2
    - gibt es Programme, mit denen ich meine regex testen kann, ohne die dauernd auf den Server laden zu müssen?
    Ja, vor kurzem hat doch einer der Mods so ein Projekt vorgestellt. Schau mal unter Codeschnipsel


    An mich bitte keine unaufgeforderten E-Mails senden (ausser ihr seid bereit geld zu zahlen, dann gerne )

    Kommentar


    • #3
      das ding ist von derHund und unter http://pcre.nophia.de erreichbar
      Ich denke, also bin ich. - Einige sind trotzdem...

      Kommentar


      • #4
        Hi,

        supergeiles Tool Danke!

        Da ist nur ein Problem: auf der Seite funktioniert mein regex wunderbar, nur wenn ich den als Datei dann hochlade:

        Warning: No ending delimiter '/' found in /kunden/****/index.php4 on line 50

        PHP-Code:
        $Quelltext preg_replace('#src="(.*)\\#is','src="../images/',$Quelltext); 
        Ist 1:1 rauskopiert

        Kommentar


        • #5
          Du hast den schließenden Delimiter ja auch mit nem \ escapet. Der muss weg dann sollte es gehen
          "Ach was soll's? Dann bau ich mir halt meinen eigenen Vergnügungspark mit Blackjack und Nutten." - Bender

          Kommentar


          • #6
            Hi,

            da da noch font-Tags usw. mit drin sind, habe ich jetzt eine andere Lösung gefunden:

            Per Schleife alle img rausziehen und statt dessen einen Counter als Platzhalter einfügen. Danach das Array durchgehen, Dinge ersetzen und an der Stelle des Counter-Platzhalters wieder einfügen.

            Jetzt habe ich nur ein Problem: Wie kann ich alle Img-Tags in ein Array ziehen

            DANKE!

            Kommentar


            • #7
              Ist 1:1 rauskopiert
              ja, siehst ja, daß es noch nicht perfekt ist .... besonders bei \

              versuch mal
              http://pcre.nophia.de/evaluate/index...441ca241600368

              edit: ok, alle images in ein array kriegste auch mit regexp .... preg_match_all und halt nach img-tags suchen ...
              aber warum nicht erstere methode?
              Die Zeit hat ihre Kinder längst gefressen

              Kommentar


              • #8
                Ich würde auch gerne die erste Methode nehmen. Die funktioniert nur nicht so wirklich (vielleicht auch, weil ich regex noch nicht sooo gut kann )

                Code:
                <IMG height=1 src="D:\dateien\images\logo.gif" align=baseline
                 border=0>qw<STRONG><EM>eqweqweqwe</EM></STRONG>qwewqe
                 <IMG alt="" hspace=0 src="D:\dateien\images\logo.gif" align=baseline
                 border=0>
                Das habe ich jetzt z.B. als Quellcode. Wenn ich dann den regex von oben
                nehme, matched der alles von dem ersten src bis zum letzten \, also beim
                zweiten Bild. Alles dazwischen wird ersetzt, und das will ich ja auch nicht.

                Also wenn es mit der ersten Methode geht, natürlich lieber die! Ich weiß halt nicht genau wie
                Zuletzt geändert von strauberry; 27.08.2004, 13:06.

                Kommentar


                • #9
                  http://pcre.nophia.de/evaluate/index...295cdf095ca226
                  so? (ergebnis der ersetzung anschauen, mein ich ^^)
                  Zuletzt geändert von derHund; 27.08.2004, 12:19.
                  Die Zeit hat ihre Kinder längst gefressen

                  Kommentar


                  • #10
                    Absoluter Hammer Danke!!!!
                    Auf der Seite gehts, nur bei mir nicht.. Aber das klappt auch noch

                    Wenn ich mir den Inhalt dieses Dings ausgeben lasse, dann steht da nicht " sondern \".

                    Ich wollte dann den regex anpassen, hat aber nicht so ganz klappt



                    Code:
                    <IMG height=1 src=\"D:\dateien\images\logo.gif\" align=baseline
                     border=0>qw<STRONG><EM>eqweqweqwe</EM></STRONG>qwewqe 
                    <IMG alt=\"\" hspace=0 src=\"D:\dateien\images\logo.gif\" align=baseline 
                    border=0>
                    Sieht also so aus, was geändert werden muss.

                    Damit ich das das nächste mal auch kann:

                    PHP-Code:
                    <img(.+)src="     //verstehe ich noch
                    .+\\([^\\]+.         // Nixblick
                    (gif|jp(e)?g))       // verstehe ich auch
                    "
                    ([^>]*)              // Nixblick 
                    PHP-Code:
                    <img\1src="../images/\2"\
                    Wofür stehen die Zahlen? Ist das ne Position?

                    DANK DIR!!!!
                    Zuletzt geändert von strauberry; 27.08.2004, 13:05.

                    Kommentar


                    • #11
                      Wie kann es sein, dass es auf der Seite funktioniert, bei mir dann aber immer eine Fehlermeldung erscheint?

                      Warning: Compilation failed: unmatched parentheses at offset 47 in /***/admin/cms/index.php4 on line 52

                      PHP-Code:
                      $Quelltext preg_replace('#<img(.+)src=\\\\".+\\([^\\]+.(gif|jp(e)?g))\\\\"([^>]*)#isU','<img\1src=\\"../images/\2\\"\5',$Quelltext); 
                      http://pcre.nophia.de/evaluate/index...3603e0ed3fde66

                      Es geht also... warum nicht bei mir

                      Kommentar


                      • #12
                        Wofür stehen die Zahlen? Ist das ne Position?
                        das sind backreferences ... die beziehen sich auf geklammerte unterausdrücke ... die seite hat auch ne kleine erklärung mit bei ...
                        Code:
                        .+\\([^\\]+\.
                        findet: mindestens ein zeichen, gefolgt von \, gefolgt von vielen zeichen, die nicht \ sind, gefolgt vom . (war nen typo, der punkt muß geslashed werden ...)
                        Code:
                        "([^>]*)
                        findet hinter dem " von src alles, was dort noch steht (bis zum >), also alles, was kein > ist ...
                        Wie kann es sein, dass es auf der Seite funktioniert, bei mir dann aber immer eine Fehlermeldung erscheint?
                        verschiedene gründe ich werd bei gelegenheit eine ausgabe des benötigten php-codes hinzufügen ...

                        irgendwie hast du zu viele \ drin ...

                        werd dir erstmal klar drüber, wie dein zu durchsuchender text aussieht, ... versuch auch mal stripslashes() .... schau auch mal nach 'magic quotes'
                        Wenn ich mir den Inhalt dieses Dings ausgeben lasse,
                        dings?

                        btw: wenn du regexp bzw. code mit \ hier im forum angeben willst, benutz lieber die code-tags, die verschlucken die \ nicht ...
                        Die Zeit hat ihre Kinder längst gefressen

                        Kommentar


                        • #13
                          Hi,

                          http://pcre.nophia.de/evaluate/index...dac834291e578d

                          funktioniert wunderbar, bei mir kommt

                          Compilation failed: unmatched parentheses at offset 46 in /***/index.php4 on line 55

                          Die Hilfe zu Backreferences sagt leider 0 über die Zahlen aus.

                          Ich komme da echt nicht weiter

                          Kommentar


                          • #14
                            funktioniert wunderbar, bei mir kommt
                            poste mal bitte deinen zugehörigen php-code, in [code ]-tags, damit die \ nicht verschluckt werden ...

                            Die Hilfe zu Backreferences sagt leider 0 über die Zahlen aus.
                            http://www.php-resource.de/tutorials/read/10/1/
                            besser?

                            durch ( und ) eingefaßte ausdrücke, so genannte subpattern, unterausdrücke, lassen sich nach ihrer definition im suchmuster und ersatzstring wiederverwenden, indem sie entweder per \x oder \\x, abhängig von single/double quotes (afaik), oder $x, wobei x jedesmal für eine zahl steht, eingebunden werden. gezählt wird bei der jeweils öffnenden klammer (1, 2, 3, 4 ...).

                            die zahlen sind also jeweils eine referenz auf einen unterausdruck ...
                            Die Zeit hat ihre Kinder längst gefressen

                            Kommentar


                            • #15
                              Hi,

                              Code:
                              $Quelltext = preg_replace('#<img(.+)src=\\".+\\([^\\]+.(gif|jp(e)?g))\\"([^>]*)#isU','<img\1src=\\"../images/\2\\"\5',$Quelltext);
                              Es soll am Ende so aussiehen wie bei dem letzten Link, den ich gepostet habe (also das Ergebnis)

                              Link war sehr interessant, danke
                              Nur ne kurze Frage nebenbei: Wieso muss ich hier nicht "^" an den Anfang schreiben?

                              DANKE!!!!

                              Kommentar

                              Lädt...
                              X