Wie man eine URL von einem Inhalt von PHP zu finden?
-
11-09-2019 - |
Frage
braucht eine einfach preg_match, die „c.aspx“ finden (ohne Anführungszeichen) in dem Inhalt, wenn er feststellt, wird die gesamte URL zurück. Als Beispiel
$content = '<div>[4]<a href="/m/c.aspx?mt=01_9310ba801f1255e02e411d8a7ed53ef95235165ee4fb0226f9644d439c11039f%7c8acc31aea5ad3998&n=783622212">New message</a><br/>';
Nun sollte es "c.aspx" von $ content preg_match und wird eine Ausgabe als
geben"/m/c.aspx?mt=01_9310ba801f1255e02e411d8a7ed53ef95235165ee4fb0226f9644d439c11039f%7c8acc31aea5ad3998&n=783622212"
Der $ Inhalt soll mehr Links mit Ausnahme von "c.aspx" hat. Ich will sie nicht. Ich möchte nur alle URL, die "c.aspx".
habenBitte lassen Sie mich wissen, wie ich es tun kann.
Lösung
Sie DOM verwenden, um HTML zu analysieren, nicht regex. Sie können Regex verwenden, obwohl das Attribut-Wert zu analysieren.
Edit:. Aktualisiert Beispiel, so dass es für c.aspx prüft
$content = '<div>[4]<a href="/m/c.aspx?mt=01_9310ba801f1255e02e411d8a7ed53ef95235165ee4fb0226f9644d439c11039f%7c8acc31aea5ad3998&n=783622212">New message</a>
<a href="#bar">foo</a>
<br/>';
$dom = new DOMDocument();
$dom->loadHTML($content);
$anchors = $dom->getElementsByTagName('a');
if ( count($anchors->length) > 0 ) {
foreach ( $anchors as $anchor ) {
if ( $anchor->hasAttribute('href') ) {
$link = $anchor->getAttribute('href');
if ( strpos( $link, 'c.aspx') ) {
echo $link;
}
}
}
}
Andere Tipps
Wenn Sie mit c.aspx darin jede Zeichenfolge in Anführungszeichen zu finden:
/"[^"]*c\.aspx[^"]*"|'[^']*c\.aspx[^']*'/
Aber wirklich, für die meisten HTML Parsing würden Sie mit irgendeiner Art von DOM-Parser besser dran, so dass Sie sicher sein können, was Sie passend ist wirklich ein href.