PHP ile bir içerikten bir URL nasıl?

2 Cevap php

Bu bulursa içeriği (tırnak işaretleri olmadan) "c.aspx" bulacaksınız hangi bir basit preg_match gerekir, o bütün url dönecektir. Bir örnek olarak,

$content = '<div>[4]<a href="/m/c.aspx?mt=01_9310ba801f1255e02e411d8a7ed53ef95235165ee4fb0226f9644d439c11039f%7c8acc31aea5ad3998&amp;n=783622212">New message</a><br/>';

şimdi $ içerik "c.aspx" preg_match gerektiğini ve bir çıkış olarak verecektir

"/m/c.aspx?mt=01_9310ba801f1255e02e411d8a7ed53ef95235165ee4fb0226f9644d439c11039f%7c8acc31aea5ad3998&amp;n=783622212"

$ Content "c.aspx" dışında daha fazla bağlantıları olmalıdır. Ben onları istemiyorum. Ben sadece "c.aspx" tüm url istiyorum.

Bana bunu nasıl yapabilirim bildirin.

2 Cevap

Sen regex, HTML değil, ayrıştırmak için DOM kullanmak. Gerçi nitelik değerini ayrıştırmak için regex kullanabilirsiniz.

Düzenleme: c.aspx denetler böylece örnek güncellendi.

$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;
            }
        }
    }
}

Bunu c.aspx ile herhangi bir alıntı dize bulmak istiyorsanız:

/"[^"]*c\.aspx[^"]*"|'[^']*c\.aspx[^']*'/

Ama gerçekten, sen eşleşen konum ne emin olabilirsiniz ki DOM çözümleyici çeşit ile daha iyi olurdu çoğu HTML ayrıştırma için gerçekten bir href olduğunu.