[Regex] Links filtern

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

  • [Regex] Links filtern

    Guten Tag,
    ich lese mit PHP den Content einer Seite ein und versuche nun alle Links herauszufiltern.
    Mein Problem ist, dass ich das irgendwie nicht hinbekomme und preg_match_all() immer über die tags "hinausgeht".
    Bsp. bei <a ...>...</a>Text<a ...>...</a> geht das Muster von dem ersten fettgedruckten zum zweiten.
    Jedoch funktioniert das ganze bei nur einem Link im Content einwandfrei

    PHP-Code:
    <?php

    $pattern 
    '#<a(?:.*)?href=([^"]*)(?:[^>]*)?>(.*?)</a>#s';

    //Pseudocontent
    $html '<a class="test" href="test1.html">test1</a>text text 
    <a class="test2" href="test2.html">test2</a> text text 
    <a href="test3.html">test3</a>'
    ;

    preg_match_all($pattern$html$trefferPREG_SET_ORDER);
    print_r($treffer);
    ?>
    Ausgabe ist :
    Array
    (
        [0] => Array
            (
                [0] => <a class="test" href="test1.html">test1</a>text text 
    <a class="test2" href="test2.html">test2</a> text text 
    <a href="test3.html">test3</a>
                [1] => 
                [2] => test3
            )

    )
    *blubb*

  • #2
    Muha. Ich habs
    PHP-Code:
    $pattern '#<a(?:.*--->[B][u]?[/u][/B]<---)?href="([^"]*)"(?:[^>]*)?>(.*?)</a>#s' 
    Da hat am Anfang noch ein begrenzedes Fragezeichen gefehlt.
    *blubb*

    Kommentar


    • #3
      Dein Ausdruck ist "greedy". Informiere dich darüber, in "Ungreedy" zu machen.
      [FONT="Helvetica"]twitter.com/unset[/FONT]

      Shitstorm Podcast – Wöchentliches Auskotzen

      Kommentar


      • #4
        Ein Problem hätte ich jetzt noch.
        Es gibt ja versch. Arten Links zu gestalten. Mit doppeltem oder einfachen Hochkomma, bzw. ohne Hochkomma (also nur href=test.php).
        Also ich bekomme alle 3 Varianten eingelesen, aber ich will ja die Ziel URL auslesen. Und da liegt das Problem.
        Hat da vielleicht jmd. eine Idee?
        *blubb*

        Kommentar


        • #5
          PHP-Code:
          <?php

              
          //Pseudocontent
              
          $html '<a class="test" href="test1.html">test1</a>text text 
              <a class="test2" href="test2.html">test2</a> text text 
              <a href="test3.html">test3</a>text text
              <a class="test4" href="test4.html" target="_blank">test4</a>'
          ;
              
              
          $pattern '/<a.*href=(.*?)(?:>|\\ )/';
              
              
          preg_match_all($pattern$html$matchesPREG_SET_ORDER);

              foreach (
          $matches as $match){
                  
          $links[] = trim($match[1], "\"'");
              }
                  
              
          print_r($links);    
          ?>
          Code:
          Array
          (
              [0] => test1.html
              [1] => test2.html
              [2] => test3.html
              [3] => test4.html
          )
          cheers zz

          Kommentar

          Lädt...
          X