folgende codezeile für mich unverständlich

Collapse
X
 
  • Filter
  • Time
  • Show
Clear All
new posts

  • 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

    Last edited by lx-club; 16-01-2004, 13:17.

  • #2
    Guck ins Manual!

    Comment


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

      Comment


      • #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?

        Comment


        • #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.

          Comment


          • #6
            Wie es scheint ja schon!

            Comment


            • #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.

              Comment


              • #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?

                Comment


                • #9
                  was spricht gegen testen.

                  Comment


                  • #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

                    Comment


                    • #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

                      Comment


                      • #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

                        Comment


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

                          Comment


                          • #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.

                            Comment


                            • #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);

                              Last edited by Sebastian W; 16-01-2004, 19:25.
                              Grüsse,
                              Sebastian


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

                              Comment

                              Working...
                              X