2012-08-07 69 views
0

我有一大堆的字符串,可能會或可能不會有類似的子以下幾點:獲取字符串部分後的整數?

<a class="tag" href="http://www.yahoo.com/5"> blah blah ...</a> 

我試着檢索「5」在鏈路的末端(即必要不是一位數號碼,它可以是巨大的)。但是,這個字符串會有所不同。鏈接之前和之後的文本將始終不同。唯一相同的是<a class="tag" href="http://www.yahoo.com/和關閉</a>

回答

1

您可以使用preg_match_all<a class="tag" href="http:\/\/(.*)\/(\d+)">正則表達式。

0

我就得到了與「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代碼。

+0

但我需要獲得鏈接了字符串 – 2012-08-07 22:27:10

+0

嘿,我在評論時編輯了帖子。 :)我已經添加了兩種不同的方法。最後一個應該適合你的問題。 – insertusernamehere 2012-08-07 22:37:53

0

因爲你只需要檢索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) 
+0

但我需要鏈接的字符串 – 2012-08-07 22:27:25

+0

在你寫的問題你需要得到5,所以我帶你的單詞。對於鏈接,我建議一個HTML解析器:[穩健,成熟的HTML解析器的PHP](http://stackoverflow.com/questions/292926/robust-mature-html-parser-for-php) – hakre 2012-08-07 22:28:10

+0

「但是,這個字符串將鏈接之前和之後的文本將永遠是不同的「 – 2012-08-07 22:29:18