我尝试匹配这个 URL,但是它不起作用,根本不匹配......
http://s48.turbobit.ru:9004/download.php?name=ATB+and+Armin+van+Buuren+-+Vice+Versa+%5Bworld-clubmusic.org%5D.mp3&md5=5aae327bd2fd7c176abf83474c5f8d69&fid=3spaskqfjxkm&uid=free&speed=55&till=1308055293&ip=84.22.91.71&trycount=1&sid=1a949a12128a9d1b9eb73ea2cba92f6a&browser=af8b7ed34111ff0bf53e39aff5bb1ad1&did=288302003&sign=f5f8344a2a456c4e53ab19616e123fb0
我的代码是错误的,有人可以帮我改正吗?
if (($u =~ /turbobit/) && (m/^http:\/\/(([A-Za-z]+[0-9-.]+)*?)([a-z]*\.[^\/]{3}\/[a-z]*\/[0-9]*)\/(.*?)\/([^\/\?\&]{4,})$/)) {
print $x . "http://cdn." . $3 . "/SQUIDINTERNAL/" . $5 . "\n";
}
我想将 uRL 重写为:
http://cdn.turbobit.net/name=ATB+and+Armin+van+Buuren+-+Vice+Versa+%5Bworld-clubmusic.org%5D.mp3
我知道它必须以其他方式工作,就像我们可以放入(name=*?)
一个元素然后就可以使用它!
答案1
这里不太清楚您要匹配的内容,因为您的正则表达式暗示您要匹配的内容比您的条件和示例似乎表明的更一般。为了回答这个问题,我将假设您正在寻找来自 turbobit 的任何子域(在任何 TLD 下,任何端口下)的内容,这些内容由 /download.php 提供,并设置了 name 参数。
# 除非你真的只想匹配 URL 中带有 turbobit 的任何内容 # 你应该更明确地这样做 如果 ($u =~ m,http://(?:[^/]+\.)?turbobit\.[^/]+/,) { # 如果你把它分解一下,这个条件会更清晰 # 我们对其中大部分都使用了非捕获符号,因为它没有 # 看起来你确实在使用这些数据。 如果 ($u =~ m,^http://(?:[A-Za-z]+[0-9-]+\.)?turbobit\.[^/:]+(?::\d+)?/download\.php.*[?&]name=([^&]+),) { 我的 $name = $1; # 您可以使用连接运算符,但为什么不直接插值呢? 打印“${x}http://cdn.turbobit.net/SQUIDINTERNAL/name=${name}\n”; } }