dongpai9986 2013-11-15 09:34
浏览 78
已采纳

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

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?

  • 写回答

1条回答 默认 最新

  • duanhuan1147 2013-11-15 09:35
    关注

    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

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 #MATLAB仿真#车辆换道路径规划
  • ¥15 java 操作 elasticsearch 8.1 实现 索引的重建
  • ¥15 数据可视化Python
  • ¥15 要给毕业设计添加扫码登录的功能!!有偿
  • ¥15 kafka 分区副本增加会导致消息丢失或者不可用吗?
  • ¥15 微信公众号自制会员卡没有收款渠道啊
  • ¥15 stable diffusion
  • ¥100 Jenkins自动化部署—悬赏100元
  • ¥15 关于#python#的问题:求帮写python代码
  • ¥20 MATLAB画图图形出现上下震荡的线条