2010-03-28 4 views
-1

Je voudrais "saisir" quelques centaines d'URL à partir de quelques centaines de pages html.Expression régulière php pour correspondre à un modèle d'URL spécifique

Motif:

<h2><a href="http://www.the.url.might.be.long/urls.asp?urlid=1" target="_blank">The Website</a></h2> 
+0

Quelle est votre question? – user187291

+12

Ils ... juste ... jamais ... arrête. Tony le poney .. il vient .... http://stackoverflow.com/questions/1732348/regex-match-open-tags-except-xhtml-self-contained-tags/1732454#1732454 –

Répondre

1
'/http:\/\/[^\/]+/[^.]+\.asp\?urlid=\d+/' 

Mais mieux utiliser HTML Parser, un exemple ici avec PHP Simple HTML DOM

$html = file_get_html('http://www.google.com/'); 

// Find all links 
foreach($html->find('a') as $element) 
     echo $element->href . '<br>'; 
3

Voici comment faire correctement avec les extensions DOM natives

// GET file 
$doc = new DOMDocument; 
$doc->loadHtmlFile('http://example.com/'); 

// Run XPath to fetch all href attributes from a elements 
$xpath = new DOMXPath($doc); 
$links = $xpath->query('//a/@href'); 

// collect href attribute values from all DomAttr in array 
$urls = array(); 
foreach($links as $link) { 
    $urls[] = $link->value; 
} 
print_r($urls); 

Notez que ce qui précède trouvera également des liens relatifs. Si vous ne voulez pas les régler le XPath pour

'//a/@href[starts-with(., "http")]' 

Notez que l'utilisation Regex pour correspondre HTML est la route de la folie. Regex fait correspondre les modèles de chaîne et ne connaît rien aux éléments et attributs HTML. DOM le fait, c'est pourquoi vous devriez le préférer à Regex pour chaque situation qui va au-delà de la correspondance d'un modèle de chaîne supertrivial de Markup.

Questions connexes