Preg_match - abrufen href

Ich steckengeblieben mit einer Frage ich habe nur geholfen auf - es ist ein neues problem, aber nur leicht.

Habe ich diese preg_match, um den Inhalt von href. Bitte erzählen Sie mir nicht, Sie nicht zu verwenden regex - ich bin mir bewusst, mit anderen Parser/Klassen etc, aber das ist ein altes Skript, das nur repariert werden muss, für jetzt. 🙂 Keine Zeit für re-schreibt!

preg_match("~<a target=\'_blank\' rel=\'nofollow\' href=\"(.*?)\">~i", $epilink, $epiurl);

Gibt es:

http://www.example.com/frame2.php?view=&epi=54673-r

Jedoch, sollte es wieder:

http://www.example.com/frame2.php?view=168204&epi=54673

Dies ist ein Beispiel in html wäre es mit der Arbeit:

<a target='_blank' rel='nofollow' href="http://www.example.com/frame2.php?view=545903&epi=54683">

Warum ist die URL, die habe ich zurückgegeben fehlerhaften?

Danke an alle für jede Hilfe.

  • Ich vermute das problem ist in der string, den Sie übergeben haben es.
  • Die variable $epilink - enthält einige html mit mindestens einer url, die habe ich eingefügt als ein Beispiel. Würde meine regex funktionieren?
  • Es würde. Allerdings, wenn es andere Zeichenfolgen früher im text, die übereinstimmen, wird es zu ergreifen, statt.
  • wie kann ich es mit nur eine dieser urls klicken?
  • Verwenden Sie einen HTML-parser statt. Zu Fuß den DOM zu finden, der alle Ihre <a> tags, und ergreifen Sie die href Eigenschaft mit _blank als Ziel und nofollow gesetzt. Es werde ein weitaus leichter zu beheben als der Versuch zu hacken, bis dieser regex.
  • Ich verstehe, dass preg_match sollte mit einmal und dann zurück, also ich kann nicht sehen, warum andere html-Elemente oder für eine andere gültige Spiele, die es gibt, können Probleme verursachen.

InformationsquelleAutor Abs | 2010-02-10
Schreibe einen Kommentar