Reputation: 186
I want to extract hash from string below which is 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";
}
in above code, the hash are located between btih:
and &dn
can i know why my code doesnt work?
Upvotes: 1
Views: 133
Reputation: 786041
You can use this lookaround based regex:
'/(?<=btih:)(.+?)(?=&dn=)/'
This means capture a string which is preceded by bith:
and followed by &dn=
Alternatively you can avoid lookbehind and use:
'/:btih:\K(.+?)(?=&dn=)/'
Here \K
is used to reset matched pattern.
As an another alternative you can avoid lookahead
also and use:
'/:btih:(.+?)&dn=/'
And use matched group #1
Upvotes: 1