Question

ont besoin d'un simple preg_match, qui trouvera « c.aspx » (sans les guillemets) dans le contenu si elle trouve, il retournera toute URL. A titre d'exemple

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

maintenant il devrait preg_match « c.aspx » de contenu $ et donnera une sortie comme

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

Le contenu de $ devrait avoir plus de liens, sauf « c.aspx ». Je ne veux pas. Je ne veux que toutes les URL qui ont "c.aspx".

S'il vous plaît laissez-moi savoir comment je peux le faire.

Était-ce utile?

La solution

Vous utilisez DOM pour analyser HTML, non regex. Vous pouvez utiliser regex pour analyser la valeur d'attribut bien.

Edit:. Par exemple mis à jour il vérifie 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;
            }
        }
    }
}

Autres conseils

Si vous voulez trouver une chaîne entre guillemets avec c.aspx en elle:

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

Mais vraiment, pour analyser plus HTML que vous seriez mieux avec une sorte d'analyseur DOM afin que vous puissiez être sûr de ce que vous correspondant est vraiment un href.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top