2009-10-05 7 views
2

Hello i want to extract links <a href="/portal/clients/show/entityId/2121" > and i want a regex which givs me /portal/clients/show/entityId/2121 the number at last 2121 is in other links different any idea?preg_match_all <a href

+0

вы хотите извлечь '2121' от '/ портала/клиентов/шоу/EntityId/2121' с помощью регулярных выражений? – halocursed

+0

нет, я хочу извлечь '/ portal/clients/show/entityId/2121' другая ссылка может иметь разное число, а вместо этого 2121 любая идея? – streetparade

ответ

0

Regex для синтаксического анализа ссылок что-то вроде этого:

'/<a\s+(?:[^"'>]+|"[^"]*"|'[^']*')*href=("[^"]+"|'[^']+'|[^<>\s]+)/i' 

Учитывая то, как ужасно это, я бы рекомендовал использовать Simple HTML Dom для получения ссылки, по крайней мере. Затем вы можете проверить ссылки, используя какое-то очень основное регулярное выражение на ссылке href.

+0

@streetparade Вы, вероятно, хотите избежать включения кавычек, ограничивающих значения атрибутов в ваших захваченных значениях, таким образом, соответствующим образом отредактируйте парсеры захвата регулярных выражений: '/ ] + | "[^"] * "| \ '[^ \'] * \ ') * HREF = "([^"] +)" | \ '[^ \'] + \' | [^ <> \ s] +/я» –

9

Simple PHP HTML Dom Parser пример:

// 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 />'; 
} 
+0

это дало бы это как результат « – streetparade

+0

, но я бы только извлек/portal/clients/show/entityId/4636, так что это сработало '/ ] + |" [^ "] *" |' [^ '] *') * href = ("[^"] + "| '[^'] + '| [^ <> \ s] +)/i' – streetparade

+0

@streetparade мой плохой, забыл сказать $ link-> href, отредактировал – karim79

4

Don't use regular expressions for proccessing xml/html. Это можно сделать очень легко с помощью builtin dom parser:

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

Это мое решение:

<?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]); 
?> 

Я рекомендую избегать использования XML на основе парсеров, потому что вы не всегда будете знать, ли документ/веб-сайт был хорошо сформирован.

С наилучшими пожеланиями

Смежные вопросы