Teil auslesen

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

  • Teil auslesen

    Hi,
    Habe wieder ein Problem

    Also, ich habe einen text der z.B. so aussieht:
    Code:
    Irgendein
    Text
    <!--BEGIN 12-->
    Hier
    steht ein
    andere Text
    <!--END 12-->
    und noch
    ein
    Text
    So, jetzt muss ich aus diesem Text den teil zwischen <!--BEGIN 12--> und <!--END 12--> auslesen und in einer variable speichern.

    Das geht doch irgendwie mit Regulären Ausdrücken, aber ich weioß nicht welche funktion ich dazu brauche.
    Könnt ihr mir helfen?

  • #2
    Tutorial, das auch die nötigen Funktionen auflistet: http://www.php-resource.de/tutorials/read/10/1/
    Ich denke, also bin ich. - Einige sind trotzdem...

    Kommentar


    • #3
      Hi,
      Danke! Bin jetzt schonmal weitergekommen.
      Habe jetzt aber noch ein Problem

      Hier erstmal wieder ein gegebener Text:
      Code:
      Irgendein
      Text
      <!--BEGIN 12-->
      Hier
      steht ein
      <!--BEGIN 21-->
      und noch ein andere Text
      <!--END 21-->
      andere Text
      <!--END 12-->
      und noch
      ein
      Text
      So, ich bin jetzt sowie, dass ich denn Teil zwischen <!--BEGIN 12--> und <!--END 12--> auslese.
      Jetzt will ich aber noch folgenden Teil darausnehmen und durch einen Text ersetzten.
      Also das hier soll raus:

      <!--BEGIN 21-->
      und noch ein andere Text
      <!--END 21-->


      Und dafür habe ich bisher folgendes:
      PHP-Code:
      $output preg_replace("/<!--BEGIN (.*)-->(.*)<!--END (.*)-->/","12",$output[1]); 
      Wieso nimmt der den Teil nicht raus un ersetzt ihn durch 12?
      Wenn ich nur
      ("/<!--BEGIN (.*)-->/"
      habe geht es, also er ersetzt <!--BEGIN 21--> durch 12.
      Was mache ich falsch?

      Kommentar


      • #4
        2 Dinge:

        1: Du schreibst nicht, was stattdessen passiert

        2: Du hast den Teil mit Backreferences überlesen.
        Ich denke, also bin ich. - Einige sind trotzdem...

        Kommentar


        • #5
          zu 1. Es passiert gar nichts.

          Habe jetzt mal einen anderen Text:
          Code:
          <table class="navil">
          <tr>
              <td class="navil_top"><b>$catname</b></td>
          </tr>
          <!--BEGIN navi_link_l.html-->
          12
          <!--END navi_link_l.html-->
          </table>
          Und jetzt habe ich folgenden Code dazu:
          PHP-Code:
          $output preg_replace("/<!--BEGIN navi_link_l.html-->.*<!--END navi_link_l.html-->/","12",$output[1]); 
          Und es passiert gar nichts.

          Wenn ich aber den Text in das hier änder:
          Code:
          <table class="navil">
          <tr>
              <td class="navil_top"><b>$catname</b></td>
          </tr>
          <!--BEGIN navi_link_l.html-->12<!--END navi_link_l.html-->
          </table>
          Dann ersetzt er es und gibt statt dem <!--BEGIN navi_link_l.html-->12<!--END navi_link_l.html--> nur noch 12 aus.

          Wieso hat der Probleme mit dem Zeilenumbruch?

          Kommentar


          • #6
            der punkt als metazeichen steht für jedes zeichen, außer dem zeilenumbruch. verwendest du modifer s, trifft der punkt auch auf den zeilenumbruch zu.
            Die Zeit hat ihre Kinder längst gefressen

            Kommentar


            • #7
              ok danke. Geht jetzt fast alles.
              Habe jetzt aber noch ein kleines problem.

              Und zwar habe ich einen array:
              PHP-Code:
              $replacetpl = array("navi_link_l.html" => "navi_link_l"); 
              Und den will ich beim ersetzen benutzen:
              PHP-Code:
              $output preg_replace("/<!--BEGIN (.*)-->.*<!--END .*-->/s",$replacetpl['$1'],$output[1]); 
              $1 ist auch navi_link_l.html, aber er gibt nichts aus.
              Und wenn ich statt $1 manuell navi_link_l.html hinschreibe geht es auch. Dann gibt er auch navi_link_l aus.
              Was mache ich noch falsch?

              Kommentar


              • #8
                hmm,

                schau doch mal, was es noch so für lustige modifier gibt ... im moment greifst du auf das array $replacetpl zu, nur, nicht wie du vermutest, auf den index 'navi_link_l.html' , sondern auf den index '$1' .... denk mal kurz drüber nach, ... außerdem müßte es eine fehlermeldung undefined ... geben?

                da du als ersatz nur einen string angeben kannst (in dem auch noch backreferences ersetzt werden können), kannst du dir ersteinmal deine variable basteln (als string) ... und die dann ausführen (eval-prinzip, ergibt den wert der variablen).

                http://regexp-evaluator.de/tutorial-...html#modifiere

                du mußt also modifier e benutzen, ...

                dein ersatz müßte dann ungefähr so
                Code:
                '$replacetpl["\1"]'
                aussehen ... jetzt wird in dem string die erste backref ersetzt, der string dann als php-code ausgeführt.

                wieso hast du eigentlich in dem END-bereich immernoch keine backref verwendet? das gibt doch wieder probleme bei verschachtelungen?
                Die Zeit hat ihre Kinder längst gefressen

                Kommentar


                • #9
                  Original geschrieben von Creativ
                  Was mache ich noch falsch?
                  Du verstehst nicht, was du machst?!

                  PHP-Code:
                  $replacetpl['$1'
                  Was macht das Dollarzeichen da drin?

                  Übrigens ist das maybe einfacher:

                  PHP-Code:

                  $text 
                  $output[1];

                  $replacetpl = array("/<!--BEGIN (.*)-->.*<!--END .*-->/s" => "navi_link_l");

                   foreach ( 
                  $replacetpl AS $key => $var) {
                        
                  $text preg_replace($key,$var,$output[1]);
                      }

                    echo 
                  $text
                  Zuletzt geändert von xManUx; 19.06.2005, 01:17.

                  Es kommt nicht darauf an, mit dem Kopf durch den Monitor zu rennen,
                  sondern mit den Augen das Manual zu lesen.

                  Kommentar


                  • #10
                    Ok, danke geht jetzt alles mit deinem Code.

                    Aber wegen dem Dollarzeichen:

                    Das ist doch wegen der backreferenz, die ruft man doch mit $n ab.

                    Kommentar

                    Lädt...
                    X