Ankündigung

Einklappen
Keine Ankündigung bisher.

Strings aus HTML-Datei auslesen

Einklappen

Neue Werbung 2019

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

  • Strings aus HTML-Datei auslesen

    Hi Ihr,

    folgendes: ich möchte eine HTML-Datei einlesen und dann bestimmte Teile aus dieser HTML-Datei ausschneiden. Als Beispiel: aus Seite1 und Seite2 möchte ich nur den Namen der HTML-Datei (also seite1.html und seite2.html) als auch den Text im Anker haben (also Seite 1 und Seite 2). Die Namen der HTML-Dateien als auch den Text zwischen in den Ankern kann ich nicht voraussagen, die werden dynamisch erzeugt, daher meine Frage nach dem Ausschneiden. Bisher habe ich sowas immer mit mehreren split-Befehlen gemacht, was mir aber jedes Mal so umständlich erscheint. Daher nun die Frage, ob jemand eine bessere Idee zur Lösung dieses Problems hat.

  • #2
    Mit einem regul�ren Ausdruck und preg_replace() w�re das relativ einfach:
    PHP-Code:
    <?php
        $regex 
    '|<a.*>(.*)</a>|Ui';
    ?>

    Kommentar


    • #3
      Schönen Dank, im Moment weiß ich noch nicht so ganz, wie das jetzt gehen soll bzw. wie ich das jetzt wo ich einbinde, da ich mich mit regulären Ausdrücken kaum auskenne, aber ich probiers mal...

      Kommentar


      • #4
        Also, mit Deiner Regex passts nicht ganz zu meinem Problem (hab meinen Testcode mal unten angefügt !). Erstmal hilft preg_replace() nicht, ich suche genau das gegenstück. Ich will nichts ersetzen, sondern einen teil ausgegeben kriegen aus der HTML-Datei. Zudem nimmt mit Dein Regex das komplette Seite1 aus der HTML-Datei, dabei will ich doch nur den Link !!! Also nur seite1.html und nicht das ...Zu dem seite1.html will ich dann noch "Seite1" haben, also im Grunde alles was im href steht (Bsp.: seite1.html) und alles was im Anker als Text steht (Bsp.: Seite1), sonst interessiert mich nix.

        PHP-Code:
        if (!file_exists($filename)) echo "Datei $filename nicht vorhanden";

        $fh fopen($filename,"r");
        $text fread($fh,filesize($filename));
        fclose($fh);

        $regex '|<a.*>(.*)</a>|Ui';
        $ergebnis preg_replace($regex,"",$text); 

        Kommentar


        • #5
          Zitat von mhtu
          Erstmal hilft preg_replace() nicht, ich suche genau das gegenstück. Ich will nichts ersetzen, sondern einen teil ausgegeben kriegen aus der HTML-Datei. Zudem nimmt mit Dein Regex das komplette Seite1 aus der HTML-Datei, dabei will ich doch nur den Link !!! Also nur seite1.html und nicht das ...Zu dem seite1.html will ich dann noch "Seite1" haben, also im Grunde alles was im href steht (Bsp.: seite1.html) und alles was im Anker als Text steht (Bsp.: Seite1), sonst interessiert mich nix.
          Du musst in preg_replace() auch auf den Teil, der im regulären Ausdruck in runden Klammern steht, zugreifen:
          PHP-Code:
          <?php
              $text 
          preg_replace($regex'$1'$text);
          ?>

          Kommentar


          • #6
            Tut mir leid, Du denkst da glaube ich genau verkehrt herum. Also replacen will ich ja nix, probiere jetzt gerade mit preg_match_all() herum...

            Kommentar


            • #7
              Zitat von mhtu
              Tut mir leid, Du denkst da glaube ich genau verkehrt herum. Also replacen will ich ja nix,[...]
              Du möchtest doch, dass alle a-Elemente entfernt werden und nur noch die Linkbeschreibung stehen bleibt?!

              EDIT: Habe mir deinen ersten Beitrag gerade noch einmal durchgelesen. Anscheinend habe ich dich da falsch verstanden und preg_match_all() wäre wohl doch eher geeignet.

              Kommentar


              • #8
                Du, bitte bitte lies meinen Text bevor Du antwortest ! Ich finds ja toll, dass du so hartnäckig versuchst zu helfen, auf sowas hoffe ich ja, aber ich hab jetzt echt zwei mal ganz deutlich geschrieben was ich will !
                Nochmal: Aus gelinkter Text will ich NUR: 'Link' und 'gelinkter Text' ! Mehr nicht !!! Das ' <a href=" ' und das '</a>' brauche ich NICHT und will das sozusagen weg haben !!!!! Natürlich sind auch um die Anker noch andere HTML-Tags, aber die brauche ich alle nicht !!! Ich will echt nur den Link und den gelinkten Text !!!

                Kommentar


                • #9
                  Ja, aber bei preg_match_all() schneidet er mir auch irgendwie das falsche raus, eben die ganzen Anker mit <a href...> und </a>. An die zu verlinkenden Text bin ich schon rangekommen, aber an den Link noch absolut nicht...

                  Kommentar


                  • #10
                    PHP-Code:
                    $text='huhu[url="Link"]gelinkter Text[/url]haha[url="Link2"]gelinkter Text2[/url]';
                    $regex='|[url="(.+)"](.+)[/url]|isU';
                    preg_match_all($regex$text$matches);
                    echo 
                    '<pre>';
                    print_r($matches);
                    echo 
                    '</pre>'

                    Kommentar


                    • #11
                      So in etwa hatte ich es jetzt auch gemacht. Mein $regex ist:
                      PHP-Code:
                      $regex '|[url="(.*)"](.*)[/url]|Ui'
                      und
                      PHP-Code:
                      preg_match_all($regex$text$matchesPREG_PATTERN_ORDER); 
                      Zwei Frage ergeben sich daraus also:
                      1. Was ist bei regulären Ausdrücken der Unterschied zwischen * und +, was ist der Unterschied zwischen |Ui und |isU ?
                      2. Ich hab immer sowas wie PREG_PATTERN_ORDER in den preg_match_all Beispielen gefunden, Du hattest es nicht, was bewirkt PREG_PATTERN_ORDER ?

                      Ich glaub danach werd ich jetzt gleich mal googlen. Aber trotzdem schonmal Danke !

                      Kommentar


                      • #12
                        Zitat von mhtu
                        1. Was ist bei regulären Ausdrücken der Unterschied zwischen * und +,[...]
                        * besagt, dass der vorherige Ausdruck beliebig oft vorkommen kann. Bei + muss der vorherige Ausdruck mindestens ein Mal vorkommen.
                        Zitat von mhtu
                        [...] was ist der Unterschied zwischen |Ui und |isU ?
                        U, i und s sind Modifier. Eine vollständige Liste der Modifier und ihre Erklärungen findest du hier.
                        Zitat von muhu
                        2. Ich hab immer sowas wie PREG_PATTERN_ORDER in den preg_match_all Beispielen gefunden, Du hattest es nicht, was bewirkt PREG_PATTERN_ORDER ?
                        Erklärungen der Konstanten findest du hier.

                        Kommentar

                        Lädt...
                        X