Reguläre Ausdrücke; Maskierung will nicht

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

  • Reguläre Ausdrücke; Maskierung will nicht

    Hallo alle zusammen,
    ich habe ein Problem was meinen erstellten regulären Ausdruck angeht und komme schon seit Stunden einfach nicht weiter.
    Zum Problem, ich habe vor einen Linksammler zu erstellen, allerdings sind die Links die ich von der Website sammle im bestimmten Format.
    Das heisst der Link steht jeweils zwischen einen <h2> -Tag und ist mit dem <a>-Tag eingebunden.
    PHP-Code:
    <h2 class="r"><a href="http://website.de">Website</a></h2
    PHP-Code:
        preg_match_all '#<h2\sclass=\"r\"><a\shref=\"http://(www\.|[\w\d\.\-_]+)/#i'$tag_filter$link_filter );
        
        foreach ( 
    $link_filter[0] as $links )
        {
            echo 
    $links '<br />';
        } 
    Wie bekomme ich sowas ähnliches hin wenn ich eine URL zwischen bestimmten Tags suchen will, ich habe das probiert doch bin schon allein an den Anführungszeichen gescheitert weil diese sich aus unerklärlichen Gründen nicht maskieren lassen (href="").

  • #2
    Re: Reguläre Ausdrücke; Maskierung will nicht

    Versuchs doch erstmal ganz einfach mit '#<h2 class="r"><a href="http://(.+)"/#i'.
    Das liefert evtl. zu viele Matches, aber dann kannst du den Ausdruck ja immernoch präzisieren.

    Kommentar


    • #3
      Genau das ist ja das Problem, nicht mal:
      PHP-Code:
      #<h2 class="r">#i 
      oder
      PHP-Code:
      #<h2\sclass=\"r\">#i 
      funktionieren, obwohl diese im Quellcode vorkommen.

      Suche ich aber nach
      PHP-Code:
      #class=#i 
      bekomme ich sofort ein Ergebnis, sobald aber ein "<> ins Spiel kommen, dann läuft gar nichts mehr.

      Und an der Syntax dürfte es auch nicht liegen:
      Zuletzt geändert von goodlike; 02.03.2008, 15:16.

      Kommentar


      • #4
        onemorenerd war schon schneller

        aber was willst du schlussendlich genau? "Webseite" oder "http://website.de"?
        Zuletzt geändert von jmc; 02.03.2008, 15:21.

        Kommentar


        • #5
          Original geschrieben von jmc
          onemorenerd war schon schneller

          aber was willst du schlussendlich genau? "Webseite" oder "http://website.de"?
          http://website.de oder halt http://www.website.de, also das was im href="" steht.

          Kommentar


          • #6
            PHP-Code:
            preg_match_all ('/<a.*?(href=".*?")[^>].*?>/i'$string$linksPREG_SET_ORDER); 
            so was?

            gruß
            peter
            Nukular, das Wort ist N-u-k-u-l-a-r (Homer Simpson)
            Meine Seite

            Kommentar


            • #7
              Original geschrieben von Kropff
              so was?

              gruß
              peter
              Danke, aber leider funktioniert das trotzdem nicht, vllt. liegt das ja an meinen Quellcode:
              PHP-Code:
              <?php 
              ?>
              Beim wd.- müssten noch Backslashes vor, allerdings entfernt die Forensoftware diese.
              So wie mein Code steht funktioniert er auch, aber allerdings kann ich die Links dann aus allen Teilen der Website auslesen, bei mir muss das ja speziell zwischen den <h2 class="r"> und den <a>-Tag sein.
              Zuletzt geändert von goodlike; 03.03.2008, 16:27.

              Kommentar


              • #8
                Code:
                preg_match_all ('/<h2 class="r"><a.*?href="(.*?)"[^>]*>.*?<\/a><\/h2>/i', $string, $links, PREG_SET_ORDER);
                gruß
                peter
                Nukular, das Wort ist N-u-k-u-l-a-r (Homer Simpson)
                Meine Seite

                Kommentar


                • #9
                  Vielen Dank, habe damit bissl rum experementiert, funktioniert schonmal allerdings mit ein paar Problemchen, ich bekomme statt den href=""-Inhalt, die Link-Bezeichung.
                  Dein Beispiel ist auf ein festes Muster ausgelegt.
                  Wenn mein ungefilterter Code so aussehen würde:
                  PHP-Code:
                  <h2 class="r"><a href="http://www.fontasy.de/" class="l" onmousedown="return...">Fontasy.de 1600 <b>fonts</b>for free!</a></h2
                  dann greift dieses Beispiel nicht mehr, wie bekomme ich es hin das es so Allgemein wie möglich bleibt?
                  Sorry wenn ich euch mit Regex-Fragen bomberdiere, habe mich schon zwar öfters mit dem Thema auseinander gesetzt, aber trotzdem nie ein festes Verständnis dafür bekommen.

                  Kommentar


                  • #10
                    Habe mittlerweile selbst eine Lösung gefunden, wenn auch eine schlechte wie ich denke, und ich glaube zu wussen wo das Problem liegt. Und zwar an htmlspecialchars(); dieser zerplückt die <>" in &gt; &lt; &qout; und erwartet die genauso wieder zurück.

                    preg_match_all ( '#h2.class=r.{10}href=.{6}http://(www\.|[\w\d\.\-_]+)/(([\w\d\.\-_,/:]+)|)#i', $tag_filter, $link_filter);

                    Kommentar

                    Lädt...
                    X