Question
Bonjour, je veux extraire les liens
<a href="/portal/clients/show/entityId/2121" >
et je veux une expression régulière qui me GIVS / portail / clients / show / entityID / 2121
le nombre est enfin 2121 dans d'autres liens différents
une idée?
La solution
Regex pour les liens d'analyse syntaxique est quelque chose comme ceci:
'/<a\s+(?:[^"'>]+|"[^"]*"|'[^']*')*href=("[^"]+"|'[^']+'|[^<>\s]+)/i'
Étant donné comment horrible est, je vous conseille d'utiliser simple HTML Dom pour obtenir les liens au moins. Vous pouvez ensuite vérifier les liens en utilisant une expression rationnelle très basique sur le lien href.
Autres conseils
simple PHP HTML Dom Parser l'exemple:
// Create DOM from string
$html = str_get_html($links);
//or
$html = file_get_html('www.example.com');
foreach($html->find('a') as $link) {
echo $link->href . '<br />';
}
Ne pas utiliser des expressions régulières pour xml Traitement De / html . Cela peut se faire très facilement en utilisant builtin analyseur dom :
$doc = new DOMDocument();
$doc->loadHTML($htmlAsString);
$xpath = new DOMXPath($doc);
$nodeList = $xpath->query('//a/@href');
for ($i = 0; $i < $nodeList->length; $i++) {
# Xpath query for attributes gives a NodeList containing DOMAttr objects.
# http://php.net/manual/en/class.domattr.php
echo $nodeList->item($i)->value . "<br/>\n";
}
"analyse syntaxique" html Je compte surtout sur PHPQuery: http://code.google.com / p / phpquery / plutôt que regex.
Ceci est ma solution:
<?php
// get links
$website = file_get_contents("http://www.example.com"); // download contents of www.example.com
preg_match_all("<a href=\x22(.+?)\x22>", $website, $matches); // save all links \x22 = "
// delete redundant parts
$matches = str_replace("a href=", "", $matches); // remove a href=
$matches = str_replace("\"", "", $matches); // remove "
// output all matches
print_r($matches[1]);
?>
Je recommande d'éviter d'utiliser des parseurs basés sur XML, parce que vous ne saurez pas toujours, si le document / site a été bien formé.
Cordialement
liens HTML de larder et peut être fait en utilisant l'analyseur am HTML.
Lorsque vous avez tous les liens, simple obtenir l'indice de la dernière barre oblique, et vous avez votre numéro. Pas regex nécessaire.