Domanda

bisogno di un semplice preg_match, che troverà "c.aspx" (senza virgolette) nel contenuto se trova, restituirà l'intero URL. Come esempio

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

ora, dovrebbe essere funzione preg_match "c.aspx" dal contenuto $ e darà un uscita come

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

Il contenuto $ dovrebbe avere più link tranne "c.aspx". Io non li voglio. Voglio solo tutto URL che hanno "c.aspx".

Per favore fatemi sapere come posso farlo.

È stato utile?

Soluzione

Si utilizza DOM per analizzare HTML, non regex. È possibile utilizzare espressioni regolari per analizzare il valore di attributo però.

Modifica:. Aggiornato esempio in modo che controlla per c.aspx

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

Altri suggerimenti

Se si desidera trovare qualsiasi stringa quotata con c.aspx in esso:

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

Ma in realtà, la maggior parte per l'analisi HTML che si starebbe meglio con una sorta di DOM parser in modo che si può essere sicuro di quello che stai corrispondenza è davvero un href.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top