droom: Regulärer Ausdruck in einem Link

Hi folks,

ein Link fängt ja bekannterweise mit <a danach kommen attribute wie href oder target.
 Gibt es ein regulärer Ausdruck, womit ich die Zieldatei eines Links bekommen kann? also das was in href drin ist.
 wenn ich weiterdenke, kann ich nur die Zieldatei von Links bekommen, wo das target-attribut "_blank" ist?

ich glaube das sollte wohl mit preg_match() gehen aber ich weiss nicht wie.

vielen Dank.

  1. Hi,

    was in href drin ist.

    Gibt es:

    $suchmuster = '~href="([^"]+)"~i';
                         | was in href drin ist
                         | erste klammerung: index 1 in ausgabe-array

    preg_match_all($suchmuster,$code,$out);
    print_r($out[1]);

    wo das target-attribut "_blank" ist?

    |1.                 |2.          |3.
    $suchmuster = '~(_blank)?[^>]*href="([^"]+)"[^>]*(?(1)|_blank)~i';
                    | vorne blank                    | wenn nicht 1, dann hier
                                        | diesmal wollen 2e klammer

    preg_match_all($suchmuster,$code,$out);
    print_r($out[2]);

    Schöne Grüße,
    Jonny 5

    1. Wenn das Wörtchen wenn nicht wär.

      Eine schnelle Suche im Archiv ergibt allein für 2009:
      http://forum.de.selfhtml.org/archiv/2009/2/t183855/
      http://forum.de.selfhtml.org/archiv/2009/4/t185389/

      Was natürlich auch an droom gerichtet ist.

    2. Super vielen Dank Jonny.
      Genau,w as ich brauchte ;-)

      1. Genau,w as ich brauchte ;-)

        Gern, mit einem positiven Lookahead gings noch eleganter:

        |wenn link
             | wenn kommt _blank vor schließendem
        '~<a(?=[^>]+_blank)[^>]+href="([^"]+)~i'
                                      |möchte nicht-quotes nach href
                                      |index=1 lookahead zählt nicht

        preg_match_all($pattern,$str,$out);
        print_r($out[1]);

        hehe, Viel Spaß dann noch,
        Jonny 5

  2. ein Link fängt ja bekannterweise mit <a danach kommen attribute wie href oder target.

    Ein Link ist ein a Element mit einem href Attribut.
    Ein Link ist aber genau so gut auch irgend ein Element im Userinterface, dessen Aktivierung zu einer neuen Ressource navigiert.

    Gibt es ein regulärer Ausdruck, womit ich die Zieldatei eines Links bekommen kann?

    Nein. Denn für das Bekommen der Zieldatei ist keine RE zuständig.
    Du kannst bestenfalls ein url extrahieren.

    also das was in href drin ist.

    Da kann auch nichts drinnen stehen, und dennoch ist die Ressource festgelegt.

    wenn ich weiterdenke, kann ich nur die Zieldatei von Links bekommen, wo das target-attribut "_blank" ist?

    Inwiefern beschränken dich deine Denkprozesse?

    ich glaube das sollte wohl mit preg_match() gehen aber ich weiss nicht wie.

    Ich arbeite nicht mit php, aber mit Perl. Beide anerkennen jedoch fast den gleichen RE-Syntax Umfang.

    /<a\s+[^<>]*?\bhref\s*=\s*(["'])(.*?)\1[^<>]*?>/

    Die Url liegt jetzt in $2 vor.

    Eine Besonderheit ist hier (["']) welches in $1 den Delimiter speichert. Dieser wird dann mit \1 unmittelbar im Pattern wieder verwendet.
    Es matcht also href="dies" und href='dies'.

    Wenn du aber das href Attribut abhängig von einem target Attribut auslesen willst, ist es besser, mit callback Funktionen zu arbeiten.

    mfg Beat

    --
    ><o(((°>           ><o(((°>
       <°)))o><                     ><o(((°>o
    Der Valigator leibt diese Fische