我有一堆字符串,可能有也可能没有类似于以下的子字符串:
<a class="tag" href="http://www.yahoo.com/5"> blah blah ...</a>
我试图检索链接末尾的“5”(不一定是一位数字,它可能很大)。但是,这个字符串会有所不同。链接之前和之后的文本总是不同的。唯一相同的是 the<a class="tag" href="http://www.yahoo.com/
和 close </a>
。
我有一堆字符串,可能有也可能没有类似于以下的子字符串:
<a class="tag" href="http://www.yahoo.com/5"> blah blah ...</a>
我试图检索链接末尾的“5”(不一定是一位数字,它可能很大)。但是,这个字符串会有所不同。链接之前和之后的文本总是不同的。唯一相同的是 the<a class="tag" href="http://www.yahoo.com/
和 close </a>
。
试试parse_url () 。从那里应该很容易。
您可以使用preg_match_all
和<a class="tag" href="http:\/\/(.*)\/(\d+)">
正则表达式来做到这一点。
我会得到“ basename ”:
// prints passwd
print basename("/etc/passwd")
要获取您可以使用的链接:
$xml = simplexml_load_string( '<a class="tag" href="http://www.yahoo.com/5"> blah blah ...</a>' );
$attr = $xml->attributes();
print $attr['href'];
最后:如果您不知道字符串的整个结构,请使用:
$dom = new DOMDocument;
$dom->loadHTML( '<a class="tag" href="http://www.yahoo.com/5"> blah blah ...</a>asasasa<a class="tag" href="http://www.yahoo.com/6"> blah blah ...</a>' );
$nodes = $dom->getElementsByTagName('a');
foreach ($nodes as $node) {
print $node->getAttribute('href');
print basename( $node->getAttribute('href') );
}
因为这也将修复无效的 HTML 代码。
由于您只需要检索 5,因此非常简单:
$r = pret_match_all('~\/(\d+)"~', $subject, $matches);
然后它在第一个匹配组中。
如果您需要链接文本等更多信息,我建议您为此使用 HTML 解析器:
require('Net/URL2.php');
$doc = new DOMDocument();
$doc->loadHTML('<a class="tag" href="http://www.yahoo.com/5"> blah blah ...</a>');
foreach ($doc->getElementsByTagName('a') as $link)
{
$url = new Net_URL2($link->getAttribute('href'));
if ($url->getHost() === 'www.yahoo.com') {
$path = $url->getPath();
printf("%s (from %s)\n", basename($path), $url);
}
}
示例输出:
5 (from http://www.yahoo.com/5)