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 diehref
Eigenschaft mit_blank
als Ziel undnofollow
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.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ausgabe
Sollte dies funktionieren:
können Sie auch preg_match_all