2013-11-15 41 views
1

我想從字符串中提取的散列下面是e5e1af55bad959546ec7608cc8685fe67bc5426e提取兩個詞

$word1 = 'btih:'; 
$word2 = '&dn'; 
$magnet = "[magnet:?xt=urn:btih:e5e1af55bad959546ec7608cc8685fe67bc5426e&dn=The+Deadly+Game+2013+DVDRip+XviD-EVO+&tr=udp%3A%2F%2Ftracker.openbittorrent.com%3A80&tr=udp%3A%2F%2Ftracker.publicbt.com%3A80&tr=udp%3A%2F%2Ftracker.istole.it%3A6969&tr=udp%3A%2F%2Ftracker.ccc.de%3A80&tr=udp%3A%2F%2Fopen.demonii.com%3A1337]"; 
if(preg_match('/'.preg_quote($word1).'(.*?)'.preg_quote($word2).'/is', $magnet, $match)){ 
$upper = strtoupper($match['1']); 
$generated = "http://torrage.com/torrent/".$upper.".torrent"; 
} 

在上面的代碼中,哈希位於btih:之間和&dn 可我知道爲什麼我的代碼不工作之間的字符串?

回答

1

您可以使用此環視基於正則表達式:

'/(?<=btih:)(.+?)(?=&dn=)/' 

這意味着捕捉這是由bith:之前和之後&dn=

或者你能避免回顧後和使用字符串:

'/:btih:\K(.+?)(?=&dn=)/' 

這裏\K用於重置匹配模式。

作爲另外一種選擇可以避免lookahead也與用途:

'/:btih:(.+?)&dn=/' 

而且使用匹配group #1

+0

作品!謝謝兄弟.. really2快速回答,並解決了我的問題.. 我讀了一些教程,瞭解正則表達式。但它太混亂..我沒有選擇,只能在這裏問..再次感謝你:)你救了我的一天 – G3M

+0

不客氣,很高興它爲你工作。 – anubhava

+0

我又遇到了一個問題。我試着用我在問題中給出的例子,它的工作原理..但不符合我的實際情況 這是我的真實代碼 - > http://pastebin.com/qrmTyWJU .. $ result ['10' ]是一個數組 - > http://pastebin.com/19j8d4z9 .. 爲什麼正則表達式不能檢測哈希?我使用爆炸分解它們,併爲$ result得到結果['10']就像問題 – G3M