link auslesen 'preg_match_all'

  • Hallo, ich hab ein problem links auszulesen


    <a href="link-test-4192456.html">
    <a href=\"link-test-4192457.html\">


    es wird immer nur die 2te variante genommen aber wie schaffe ich es das beide genommen werden.


    das hier verwende ich

    • PHP
      preg_match_all("!<a .*?href=\"([^\"]*)\"[^>]*>(.*?)</a>!", $link, $found );
      $url = $found[1];


  • was machen diese \ bi denen a? kenn ich nicht.



    hast du dir link schonmal ausgeben lassen?


    \ ist nämlich ein escape Zeichen was dann nicht unbeding im string vorhanden ist

  • Aufgrund der besseren Lesbarkeit und zum besseren Verständnis trotzdem nicht verkehrt.


    Dieser Ausdruck mag noch klein sein, es gibt jedoch auch weitaus größere reguläre Ausdrücke die schnell unübersichtlich werden wenn man mal eben 4 mal hintereinander den Backslash hat, 8 mal infolge.

  • naja dann trenn doch gleich mit leerzeichen^^
    weil dieses | steht ja eig für entweder oder




    und ja mit den backslashen ist verwirrend
    man muss ja einmal den für den string dann den für den regulären ausdruck und dann erst der der gefunden werden soll

  • es könnte aber auch |
    oder in seinen fall zwei mal ein " stehen
    und der reguläre ausdruck findet etwas
    (nichht geprüft aber müsste so sein)



    ein entweder oder geht nämlich so:
    (variante2|variante1)



    das ist meiner:

    PHP
    '/\\\?[\'"](.*)[\'"]/'
  • ein entweder oder geht nämlich so:
    (variante2|variante1)


    Und genau so steht es in unseren Beispielen niedergeschrieben, wo ist das Problem?


    Dein Ausdruck kriegt Probleme bei maskierten " oder ', auch vor dem 2. Vorkommen eben dieser würde ein Backslash auftauchen.

  • [variante2|variante1]
    ist was andres als
    (variante2|variante1)
    ........


    probierst ruhig aus.
    würde ja nen Beispiel machen aber da ist der lernefekt net so groß

  • Genauer gesehen sind die runden Klammern eine Gruppierung (grouping), welche außerdem im Array gespeichert wird (also in diesem Fall nicht benötigt ist) und die eckigen Klammern sind sogenannte Character Classes.


    Hier im Forum setzen wir selbstverständlich die (in Charakter Classes optionalen) Trennstriche zur Lesbarkeit ein.


    Das angesprochene Problem ist gelöst und die Diskussion gehört hier nicht mehr hinein, dafür wäre ein neuer Thread mit entsprechendem Titel angebracht.

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!