folgende codezeile für mich unverständlich

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

  • folgende codezeile für mich unverständlich

    hi...

    habe hier im forum mal nach beiträgen zu templates gesucht.

    folgende zeile ist mir nicht ganz klar:

    PHP-Code:
    ereg_replace("(.*)<!-- BEGIN $name -->(.*)<!-- END $name -->(.*)""\2"$this->tpl); 
    was hat die "\2" zu bedeuten?

    EDIT:

    im originalstand "\2" und nicht nur "2"

    und sorry... thema müsste verschoben werden, hab ich nicht drauf geachtet

    Zuletzt geändert von lx-club; 16.01.2004, 14:17.

  • #2
    Guck ins Manual!

    Kommentar


    • #3
      hab ich ja schon... hab das trotzdem nicht ganz kapiert

      Kommentar


      • #4
        string ereg_replace ( string Suchmuster, string Ersatz, string Zeichenkette)

        Diese Funktion durchsucht Zeichenkette nach Übereinstimmungen mit Suchmuster und ersetzt dann den übereinstimmenden Text durch Ersatz.
        Was ist bitte daran nicht zu kapieren?

        Kommentar


        • #5
          Original geschrieben von Happy Nihilist
          Was ist bitte daran nicht zu kapieren?
          was es mit der "\2" auf sich hat als string, der das suchmuster ersetzen soll. es wird doch da nicht "\2" in die datei geschrieben.

          Kommentar


          • #6
            Wie es scheint ja schon!

            Kommentar


            • #7
              Original geschrieben von lx-club
              was es mit der "\2" auf sich hat als string, der das suchmuster ersetzen soll. es wird doch da nicht "\2" in die datei geschrieben.
              http://www.php.net/manual/de/function.ereg-replace.php

              Wenn Suchmuster eingeklammerte Teilzeichenketten enthält, darf Ersatz Teilzeichenketten der Form \\Ziffer enthalten, die dann durch die Ziffer'ste Teilzeichenkette ersetzt werden. \\0 erzeugt den gesamten Inhalt der durchsuchten Zeichenkette. Bis zu neun Teilzeichenketten dürfen verwendet werden.

              und was kapierst du daran nicht ...?
              I don't believe in rebirth. Actually, I never did in my whole lives.

              Kommentar


              • #8
                ich habs mir jetzt mehrmals durchgelesen und nun weiss ich wie das zusammenhängt. die erklärung im manual hab ich vorhin nicht so richtig verstanden.

                ich hab mir zu testzwecken mal ein script gemacht und mir dann mal die ausgabe angesehen.

                nun ist das problem, das das script ewig lang braucht, wenn ich mir

                PHP-Code:
                $block ereg_replace("(.*)<!-- BEGIN -->(.*)<!-- END -->(.*)""\\2"$maintpl);
                echo 
                $block
                das ausgeben lasse.
                ist das so normal?

                Kommentar


                • #9
                  was spricht gegen testen.

                  Kommentar


                  • #10
                    hi!

                    mach das lieber mal mit preg_replace().
                    ereg is zu lahm. (\2 mit \\2 ersetzen!)

                    der ausdruck ersetzt halt den text in der 2. klammer mit $maintpl...

                    PHP-Code:
                    $block preg_replace("/(.*)<!-- BEGIN -->(.*)<!-- END -->(.*)/""\\2"$maintpl); 

                    gruss
                    beebob

                    Kommentar


                    • #11
                      Original geschrieben von beebob

                      PHP-Code:
                      $block preg_replace("/(.*)<!-- BEGIN -->(.*)<!-- END -->(.*)/""\\2"$maintpl); 
                      ich habe das jetzt mal auf folgende datei angewandt:

                      Code:
                      ... <table bgcolor="#D6E0EA" class="rahmen" width="700" align="center" cellpadding="0" cellspacing="10" border="0">
                      <tr>
                      <td>
                        <form method="post" action="[:Target:]">
                        <table width="250" cellpadding="0" cellspacing="0" border="0">
                          <tr><th colspan='2' height="16">1. Menüpunkt auswählen</th></tr>
                        </table><br>
                        <table width="250" class="rahmen" cellpadding="0" cellspacing="0" border="0">	
                          
                        <!-- BEGIN -->
                           <tr>
                             <td width="50">[:radio:]</td>
                             <td>[:Baum:]&nbsp;</td>
                           </tr>
                           <tr>
                             <td colspan="2" class="blank"></td>
                           </tr>
                        <!-- END -->
                        
                        </table>
                      </td>
                      <td width="100%" valign="top">
                        <table width="100%" cellpadding="0" cellspacing="0" border="0">
                        <tr>
                          <th colspan="2" height="16">2. Aktion ausführen</th>
                        </tr>
                        </table><br> ...
                      Leider wird gar nichts ersetzt. mir wird die komplette datei wieder angezeigt

                      Kommentar


                      • #12
                        .* ist gierig.

                        Deswegen mußt du den modier U benutzen, oder aber .*? schreiben:

                        block = preg_replace("/(.*)<!-- BEGIN -->(.*)<!-- END -->(.*)/U", "$2", $maintpl);

                        Oder:

                        block = preg_replace("/(.*?)<!-- BEGIN -->(.*?)<!-- END -->(.*?)/", "$2", $maintpl);
                        Grüsse,
                        Sebastian


                        Profil Flex Freelancer
                        Twitter twitter.com/flashhilfe
                        Web Flash und Flex Community

                        Kommentar


                        • #13
                          ja, stimmt, sorry.
                          mann muss ja auch mal wissen wann schluss is

                          Kommentar


                          • #14
                            danke erstmal für die hilfe. ist ja echt ne knifflige sache mit diesen regulären ausdrücken. leider ersetzt es bei mir immer noch nix. mmir wird jedesmal die gesamte datei angezeigt. hier mal das ganze script:

                            PHP-Code:
                            <?
                            $maintpl = implode('',file('maintpl.htm'));
                            //$block = preg_replace("/(.*)<!-- BEGIN -->(.*)<!-- END -->(.*)/U", "$2", $maintpl);
                            $block = preg_replace("/(.*?)<!-- BEGIN -->(.*?)<!-- END -->(.*?)/", "$2", $maintpl);

                            echo $block;
                            ?>
                            weder die eine noch die andere methode geht.

                            Kommentar


                            • #15
                              @ beebob


                              @ lx-club
                              Meinst du das so? - ... hab den Thread nicht ganz gelesen

                              $block = preg_replace("/<!-- BEGIN -->(.*)<!-- END -->/sU", "$1", $maintpl);

                              Nachtrag:
                              Wohl eher so:

                              $block = preg_replace("/(.*)<!-- BEGIN -->(.*)<!-- END -->(.*)/sU", "$2", $maintpl);

                              Zuletzt geändert von Sebastian W; 16.01.2004, 20:25.
                              Grüsse,
                              Sebastian


                              Profil Flex Freelancer
                              Twitter twitter.com/flashhilfe
                              Web Flash und Flex Community

                              Kommentar

                              Lädt...
                              X