我有一大堆的字符串,可能會或可能不會有類似的子以下幾點:獲取字符串部分後的整數?
<a class="tag" href="http://www.yahoo.com/5"> blah blah ...</a>
我試着檢索「5」在鏈路的末端(即必要不是一位數號碼,它可以是巨大的)。但是,這個字符串會有所不同。鏈接之前和之後的文本將始終不同。唯一相同的是<a class="tag" href="http://www.yahoo.com/
和關閉</a>
。
我有一大堆的字符串,可能會或可能不會有類似的子以下幾點:獲取字符串部分後的整數?
<a class="tag" href="http://www.yahoo.com/5"> blah blah ...</a>
我試着檢索「5」在鏈路的末端(即必要不是一位數號碼,它可以是巨大的)。但是,這個字符串會有所不同。鏈接之前和之後的文本將始終不同。唯一相同的是<a class="tag" href="http://www.yahoo.com/
和關閉</a>
。
您可以使用preg_match_all
和<a class="tag" href="http:\/\/(.*)\/(\d+)">
正則表達式。
給parse_url()一試。應該很容易從那裏。
我就得到了與「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)
但我需要鏈接的字符串 – 2012-08-07 22:27:25
在你寫的問題你需要得到5,所以我帶你的單詞。對於鏈接,我建議一個HTML解析器:[穩健,成熟的HTML解析器的PHP](http://stackoverflow.com/questions/292926/robust-mature-html-parser-for-php) – hakre 2012-08-07 22:28:10
「但是,這個字符串將鏈接之前和之後的文本將永遠是不同的「 – 2012-08-07 22:29:18
但我需要獲得鏈接了字符串 – 2012-08-07 22:27:10
嘿,我在評論時編輯了帖子。 :)我已經添加了兩種不同的方法。最後一個應該適合你的問題。 – insertusernamehere 2012-08-07 22:37:53