Reguläre Ausdrücke; Maskierung will nicht

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

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

    Comment


    • #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:
      Last edited by goodlike; 02-03-2008, 15:16.

      Comment


      • #4
        onemorenerd war schon schneller

        aber was willst du schlussendlich genau? "Webseite" oder "http://website.de"?
        Last edited by jmc; 02-03-2008, 15:21.

        Comment


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

          Comment


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

            Comment


            • #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.
              Last edited by goodlike; 03-03-2008, 16:27.

              Comment


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

                Comment


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

                  Comment


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

                    Comment

                    Working...
                    X