2009-06-28 84 views
0

最有可能我在這裏錯過了一些明顯的東西,但爲什麼我需要調用搜索/替換正則表達式兩次以在下面的代碼中有任何效果?如果我把它只有一次,更換不會發生:-(爲什麼第一次更換沒有任何效果?

use strict; 
use warnings; 
use LWP::Simple; 

my $youtubeCN = get(shift @ARGV); 
die("Script tag not found!\n") 
unless $youtubeCN =~ /<script src="(.*?)">/; 
my $youtubeScr = $1; 
# WHY ??? 
$youtubeScr =~ s/&amp;/&/g; 
$youtubeScr =~ s/&amp;/&/g; 
my $gmodScr = get($youtubeScr); 

$gmodScr =~ s/http:\/\/\?container/http:\/\/www.gmodules.com\/ig\/ifr\?/; 
print "<script type=\"text/javascript\">$gmodScr</script>\n"; 

更新:我把這個腳本是這樣的:

perl bork_youtube_channel.pl 'http://www.youtube.com/user/pennsays' 

如果放大器不能正常轉化成&,我會回來的HTML頁面(可能是一個錯誤網頁),而不是JavaScript在步驟2

更新:原來的URL被人之後雙重編碼,湖感謝大家的幫助!

+1

不要嘗試使用正則表達式來解析HTML。 – Svante 2009-06-28 17:15:43

+0

你用什麼來調用這個參數? – Xetius 2009-06-28 17:23:20

回答

7

我懷疑,如果你看看輸入數據,它做正確的事情 - 我的猜測是,在編碼和解碼中,你沒有看到真正的輸入和輸出。例如,試試這個:

use strict; 
use warnings; 

my $youtubeScr = "a&amp;b"; 

$youtubeScr =~ s/&amp;/&/g; 
print $youtubeScr; 
print "\n"; 

$youtubeScr =~ s/&amp;/&/g; 
print $youtubeScr; 
print "\n"; 

這將打印

a&b 
a&b 

換句話說,它已經工作開始。

您確定您的原始文本不是foo&amp;amp;bar?這將產生

foo&amp;bar 
foo&bar 

與上述代碼。

PS我的perl-fu很爛。對於上述代碼中任何語言濫用的道歉,但我認爲它應該仍然有幫助:)

相關問題