我從魷魚Web代理Perl腳本:爲什麼這個正則表達式不匹配?
#!/usr/bin/perl
$|=1;
while (<>) {
@X = split;
$x = $X[0];
$_ = $X[1];
if (m/^http:\/\/([0-9.]{4}|.*\.youtube\.com|.*\.googlevideo\.com|.*\.video\.google\.com).*?\&(itag=22).*?\&(id=[a-zA-Z0-9]*)/) {
print $x . "http://video-srv.youtube.com.SQUIDINTERNAL/" . $2 . "&" . $3 . "\n";
# youtube Normal screen always HD itag 35, Normal screen never HD itag 34, itag=18 <--normal?
} elsif (m/^http:\/\/([0-9.]{4}|.*\.youtube\.com|.*\.googlevideo\.com|.*\.video\.google\.com).*?\&(itag=[0-9]*).*?\&(id=[a-zA-Z0-9]*)/) {
print $x . "http://video-srv.youtube.com.SQUIDINTERNAL/" . $2 . "&" . $3 . "\n";
} else {
print $x . $_ . "\n";
}
}
,我從http://wiki.squid-cache.org/ConfigExamples/DynamicContent/YouTube了。 我測試輸入諸如
http://v24.lscache6.c.youtube.com/videoplayback?sparams=id%2Cexpire%2Cip%2Cipbits%2Citag%2Calgorithm%2Cburst%2Cfactor%2Coc%3AU0hPRVFUTl9FSkNOOV9JTlJF&fexp=905230%2C901013&algorithm=throttle-factor&itag=34&ipbits=0&burst=40&sver=3&signature=2A5088FD4F64CF9D58A5B798E14452D71B51BAE8.2EABF06D09C8C81650266C5464CF1D0B4D6C25CC&expire=1300190400&key=yt1&ip=0.0.0.0&factor=1.25&id=e838f2cd3549e3cb
在使用RegexBuddy用Perl語法,並且我看到它匹配上述腳本中的第二正則表達式。但是當我運行腳本時它不匹配。我不是Perl程序員,所以我錯了?
必須有一個模塊來更容易(更準確地)解析URLS。但那不是重點。你確定你的網址是你所在行的第二個字段嗎?因爲'$ _ = $ X [1];'。 – Benoit 2011-03-15 08:35:40
的確,「URI」模塊 - 即使你不使用它,將匹配分成幾個階段可能是一個好主意,這可以追蹤不匹配的原因。 – reinierpost 2011-03-15 09:04:20