Ronja: Tag und alles was drinsteht aus String löschen

Hallo,

gibt es eine Möglichkeit einen String von allen <a></a>-Tags zu reinigen, damit meine ich zum einen alles was zwischen den <a></a>-Tags steht und alles was in den <a></a>-Tags steht.

Also so:

$string_alt = "Das ist ein Test zum Schauen - <a href="http://test.de">hier klicken</a>.";

$string_neu = "Das ist ein Test zum Schauen - .";

Wär toll wenn mir jemand helfen könnte - hab mal von Regexp gelesen, das verstehe ich aber nicht. Evtl hat ja jemand ne Lösung ...

Ganz lieben Dank ...

Eure Ronja

  1. Hello,

    $string_alt = "Das ist ein Test zum Schauen - <a href="http://test.de">hier klicken</a>.";

    Überleg mal, wie man das ohne Regular Expressions lösen könnte.

    Womit beginnt der <a Tag?
    Womit endet der a> Tag?

    Wie kann man das Vorkommen eines Teilstrings in einem größeren testen? Entweder, man nimmt eine fertige Funktion (schau mal unter Stringfunktionen im PHP-Manual) oder man baut sich eine. Dazu muss man den String von vorne durchlesen.
    --> while-Schleife
        Abbruchbedingung
        Buchstabe = String{i}

    Viel Erfolg

    Grüße

    Tom

  2. hi Ronja,

    hab mal von Regexp gelesen, das verstehe ich aber nicht

    Trotzdem wäre genau das wohl die für dich infrage kommende Lösung. Schau dir einfach nochmal genau an, was du unter http://www.php.net/manual/de/function.preg-replace.php lesen kannst, ich bin überzeugt, daß du es für diesen einfachen Fall dann auch kapierst und umsetzen kanns.

    Grüße aus Berlin

    Christoph S.

  3. $string_neu = preg_replace ('!<a.+?</a>!is','',$string_alt);
    müsste funktionieren

    1. Hello Yserman,

      $string_neu = preg_replace ('!<a.+?</a>!is','',$string_alt);

      Das sieht gut aus. Erklär doch bitte noch, was da passieren soll:

      '     Stringdelimiter
      !     Delimiter für RegExp, "frei" gewählt, erstes Zeichen zählt
      <a    normale Zeichen, müssen vorkommen
      .+    jedes beliebige Zeichen 1 bis x Mal, normalerweise ohne \n

      ?     warum soll das Zeichen null bis einmal vorkommen und welches?

      </a>  drei Zeichen, die vorkommen sollen
      !     Ende des regulären Ausdrucks
      i     Alles Case insensitive
      s     der Punkt steht auch für \n
      '     Stringdelimiter

      Wird nun nur das erste Vorkommen des Ausdrucks getauscht, odr werden alle getauscht? Oder braucht man noch ein g?

      Wofür steht das Fragezeichen. Regelt das nicht schon der Punkt?

      Grüße

      Tom

      1. Hallo Tom,

        Wird nun nur das erste Vorkommen des Ausdrucks getauscht, odr werden alle getauscht?

        es werden alle getauscht (außer du gibst als 4.Parameter noch ein Limit an, siehe http://www.php.net/preg_replace)

        Wofür steht das Fragezeichen. Regelt das nicht schon der Punkt?

        das Fragezeichen sorgt dafür, das das .+ nicht zu gierig ist. Ohne Fragezeichen würde möglicherweise alles zwischen dem ersten '<a' und dem letzten '</a>' entfernen.

        Grüße aus Nürnberg
        Tobias

        --
        Selfcode: sh:( fo:) ch:? rl:( br:< n4:& ie:% mo:| va:) de:] zu:) fl:( ss:| ls:[ js:|
        1. Hello, nochmal ich,

          es werden alle getauscht (außer du gibst als 4.Parameter noch ein Limit an, siehe http://www.php.net/preg_replace)

          Ok, hab ich mir in meiner Unterlage vermerkt.
          Aber was macht denn dann der Modifier "g" ?

          Wofür steht das Fragezeichen. Regelt das nicht schon der Punkt?
          das Fragezeichen sorgt dafür, das das .+ nicht zu gierig ist. Ohne Fragezeichen würde möglicherweise alles zwischen dem ersten '<a' und dem letzten '</a>' entfernen.

          Woher weiß man das, dass der Punkt "nicht so gierig" sein soll? Hat Das Fragezeichen grundsätzlich diese Bedeutung? Ich habe hier stehen:
          Das Zeichensoll null- bis einmal hintereinander vorkommen.

          Wäre das hier nicht sogar erwünscht, dass  Punkt und Plus alles fressen zwischen den fest vorgegebenen Zeichenketten?

          Abgesehen davon, dass so auch Anker gefressen werden und nicht nur Hyperreferenzen...

          Grüße

          Tom

          1. Hallo Tom,

            Aber was macht denn dann der Modifier "g" ?

            keine Ahnung, auf http://www.php.net/manual/en/pcre.pattern.modifiers.php steht er nicht, und mein Perl-Buch in dem drinsteht liegt daheim (sitze gerade in einer Vorlesung :-))

            Wofür steht das Fragezeichen. Regelt das nicht schon der Punkt?
            das Fragezeichen sorgt dafür, das das .+ nicht zu gierig ist. Ohne Fragezeichen würde möglicherweise alles zwischen dem ersten '<a' und dem letzten '</a>' entfernen.

            Woher weiß man das, dass der Punkt "nicht so gierig" sein soll? Hat Das Fragezeichen grundsätzlich diese Bedeutung? Ich habe hier stehen:
            Das Zeichensoll null- bis einmal hintereinander vorkommen.

            hinter einem + oder einem * hat das Fragezeichen ? die Sonderbedeutung, dass es auf ungreedy schaltet.

            Wäre das hier nicht sogar erwünscht, dass  Punkt und Plus alles fressen zwischen den fest vorgegebenen Zeichenketten?

            nein, ohne das Fragezeichen würde von
             'anfang <a href="bla.html">nix</a> text <a href="foo.php">nocheintext</a> keintext'
            nur
             'anfang keintext'
            übrigbleiben, mit ? aber
             'anfang text keintext'

            Abgesehen davon, dass so auch Anker gefressen werden und nicht nur Hyperreferenzen...

            stimmt, das ist dann aber ein anderes Problem :-)

            Grüße aus Nürnberg
            Tobias

            --
            Selfcode: sh:( fo:) ch:? rl:( br:< n4:& ie:% mo:| va:) de:] zu:) fl:( ss:| ls:[ js:|
            1. Hallo nochmal,

              Aber was macht denn dann der Modifier "g" ?

              hätte ich ja auch drauf kommen könnten, dass es sowas in selfhtml gibt: http://selfhtml.teamone.de/cgiperl/sprache/regexpr.htm#flags[1] :-) 'g' steht demnach für "Global suchen, d.h. alle Vorkommen finden." Demnach dürfte man es nicht brauchen, da preg_replace ja schon alle vorkommen findet.

              [1] zu gierig steht auf der Seite übrigends auch was.

              Grüße aus Nürnberg
              Tobias

              --
              Selfcode: sh:( fo:) ch:? rl:( br:< n4:& ie:% mo:| va:) de:] zu:) fl:( ss:| ls:[ js:|
              1. Hello Tobi,

                Danke.

                http://selfhtml.teamone.de/cgiperl/sprache/regexpr.htm#flags[1] :-) 'g' steht demnach für "Global suchen, d.h. alle Vorkommen finden." Demnach dürfte man es nicht brauchen, da preg_replace ja schon alle vorkommen findet.

                [1] zu gierig steht auf der Seite übrigends auch was.

                Ich hab die Info gleich in meine Sammlung aufgenommen. So langsam glaube ich, dass drei Ordner doch besser sind als ein Buch. Ich habe da noch den "Tischer - PC Intern" aud 1991. Da liegen inzwischen soviele Zettel drin, dass das Buch platzt.

                Gibt es irgendwo eine empfehlenswerte Doku / Tutorial über RegExp auf Deutsch? Ich habe schon etliche intensive Suchen im Internet durch und bei unserer Buchhandlung <werbung>http://www.graff.de</werbung> gab's im Moment leider auch nichts.

                Grüße

                Tom

                1. Hallo Tom,

                  Gibt es irgendwo eine empfehlenswerte Doku / Tutorial über RegExp auf Deutsch? Ich habe schon etliche intensive Suchen im Internet durch und bei unserer Buchhandlung <werbung>http://www.graff.de</werbung> gab's im Moment leider auch nichts.

                  mhh... ich wüsste keine, ich habe den Teil zu regulären Ausdrücken in http://www.amazon.de/exec/obidos/ASIN/3897211440/ gelesen, allerdings ist das nur ein Kapitel, und nur deswegen das Buch zu kaufen, ist vielleicht etwas teuer. Ob http://www.amazon.de/exec/obidos/ASIN/3897213494/ was taugt, weiß ich nicht (vielleicht schau ich er mir bei Gelegenheit mal in einer Buchhandlung oder in der Bibliotek an :-)).

                  Grüße aus Nürnberg
                  Tobias

                  --
                  Selfcode: sh:( fo:) ch:? rl:( br:< n4:& ie:% mo:| va:) de:] zu:) fl:( ss:| ls:[ js:|
                2. Hi,

                  Gibt es irgendwo eine empfehlenswerte Doku / Tutorial über RegExp auf Deutsch? Ich habe schon etliche intensive Suchen im Internet durch und bei unserer Buchhandlung <werbung>http://www.graff.de</werbung> gab's im Moment leider auch nichts.

                  Ich bin bei der Fachbuchhandlung http://www.lob.de fündig geworden. Das erste Buch das ich dort gefunden habe sieht ganz gut aus.

                  Gruß,
                  small-step