2009-06-28 82 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很烂。对于上述代码中任何语言滥用的道歉,但我认为它应该仍然有帮助:)

相关问题