Preg_match_all

时间:2009-10-05 12:07:49

标签: php preg-match hyperlink

您好我想提取链接 <a href="/portal/clients/show/entityId/2121" > 我想要一个正则表达式给我/ portal / clients / show / entityId / 2121 最后2121的数字与其他链接不同 任何想法?

6 个答案:

答案 0 :(得分: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 />';
}

答案 1 :(得分: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";
}

答案 2 :(得分:1)

当“解析”html时,我主要依赖于PHPQuery:http://code.google.com/p/phpquery/而不是正则表达式。

答案 3 :(得分:1)

这是我的解决方案:

<?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的解析器,因为你并不总是知道, 文件/网站是否形成良好。

祝你好运

答案 4 :(得分:0)

可以使用HTML解析器完成HTML中的配对链接。

当你拥有所有链接时,只需获取最后一个正斜杠的索引,就可以得到你的号码。 不需要正则表达式。

答案 5 :(得分:0)

解析链接的正则表达式是这样的:

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

考虑到这是多么可怕,我建议至少使用Simple HTML Dom获取链接。然后,您可以使用链接href上的一些非常基本的正则表达式检查链接。