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 、コードが機能しない理由を知ることができますか?

4

1 に答える 1

1

このルックアラウンド ベースの正規表現を使用できます。

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

bith:これは、前後にある文字列をキャプチャすることを意味します&dn=

または、後読みを避けて次を使用することもできます。

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

ここで\Kは、一致したパターンをリセットするために使用されます。

別の代替手段として、回避lookaheadして使用することもできます:

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

そしてマッチしたものを使うgroup #1

于 2013-11-15T09:35:11.960 に答える