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&amp;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&amp;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".

haben

Bitte lassen Sie mich wissen, wie ich es tun kann.

War es hilfreich?

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&amp;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.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top