在两个单词之间提取一个字符串

时间:2013-11-15 09:34:03

标签: php regex

我想从下面的字符串中提取哈希值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 个答案:

答案 0 :(得分:1)

您可以使用此基于外观的正则表达式:

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

这意味着捕获一个前面有bith:后跟&dn=

的字符串

或者你可以避免使用lookbehind并使用:

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

此处\K用于重置匹配的模式。

作为另一种选择,您也可以避免使用lookahead并使用:

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

并使用匹配的group #1