perl 如何提取html文件中连续script标签字串并进行合并?
处理是针对html代码,提取出字串合并再替换回去!能用正则处理更好!步骤是1,先用正则把路径,文件名提取出来2,再组成个字串3,进行替换处理前的代码<html><head...
处理是针对html代码,提取出字串合并再替换回去!能用正则处理更好!
步骤是
1,先用正则把路径,文件名提取出来
2,再组成个字串
3,进行替换
处理前的代码
<html>
<head>
<script src="/js/a.js"></script>
<script src="/js/b.js"></script>
<script src="/js/c.js"></script>
</head>
<body>
</body>
<script src="/js/d.js"></script>
</html>
像a.js b.js c.js 这三个script标签是连续的,用perl把这连续的三个处理成一个如下,该怎么写啊?
<html>
<head>
<script src="/js/a.js,b.js,c.js"</script>
</head>
<body>
</body>
<script src="/js/d.js"</script>
</html> 展开
步骤是
1,先用正则把路径,文件名提取出来
2,再组成个字串
3,进行替换
处理前的代码
<html>
<head>
<script src="/js/a.js"></script>
<script src="/js/b.js"></script>
<script src="/js/c.js"></script>
</head>
<body>
</body>
<script src="/js/d.js"></script>
</html>
像a.js b.js c.js 这三个script标签是连续的,用perl把这连续的三个处理成一个如下,该怎么写啊?
<html>
<head>
<script src="/js/a.js,b.js,c.js"</script>
</head>
<body>
</body>
<script src="/js/d.js"</script>
</html> 展开
2个回答
展开全部
我这里跟你输出到终端了,你想要重写新文件或覆盖文件都随便你修改。我测试已经通过了,关键在于正则表达式提取所要信息并重组替换。
use warnings;
open FILE, "1.html" or die "no file";
my $newword="";
while(<FILE>)
{
if(/\<script src=\"\/js\/(\S+)\"\>\<\/script\>/)
{ if ($newword eq "")
{$newword=$1;}
else {$newword.=",$1";}
}
else
{ if(/\<\/head\>/)
{print ("<script src=\"/js/$newword\"></script>\n");}
print $_;
}
}
use warnings;
open FILE, "1.html" or die "no file";
my $newword="";
while(<FILE>)
{
if(/\<script src=\"\/js\/(\S+)\"\>\<\/script\>/)
{ if ($newword eq "")
{$newword=$1;}
else {$newword.=",$1";}
}
else
{ if(/\<\/head\>/)
{print ("<script src=\"/js/$newword\"></script>\n");}
print $_;
}
}
更多追问追答
追问
谢谢你的代码,你这是把所有的js都处理了,而不是连续的一组标签。
请教下,如果打开的不是个文件,而是个字串,while那里要如何写啊?
后面替换那的问题是,真实的html文件head里还有其它很多标签,不是看到有就输出吧,
如果这些js文件在之外呢?或是在body的尾部呢?
追答
while,你读的是什么,就用while()括起来什么,这里的while只是为了逐行处理,任何可以逐行处理的循环都可以,for等。。。你甚至可以用下标一个个的写,但是麻烦点。
大概我开始没理解你的目的,或者你也没说很清楚哈。我再帮你写个,perl这个东西,一定要说的很详细啊,否则程序员容易误解的。你说的打开的是字符串,也就是一个标量咯?比如$content,或者是一个数组@line ?
好了,我现在给你写了2个版本,也是为了碰到连续的script就合并。第一例直接读文件,第二例读的含内容字符串的数组或者标量:
use warnings;
open FILE, "1.html" or die "no file";
my $newword="";
my $found=0;
while()
{
if(/\\/)
{ $found=1;
if ($newword eq "")
{$newword=$1;}
else {$newword.=",$1";}
}
else
{ if($found==1)
{print ("\n");}
$found=0; $newword="";
print $_;
}
}
close FILE;
#method 2
printf("\n\nmethod2\n");
open FILE, "1.html" or die "no file";
my $content="";
while()
{$content.=$_;}
my @line= split(/\n/,$content);
foreach(@line)
{
if(/\\/)
{ $found=1;
if ($newword eq "")
{$newword=$1;}
else {$newword.=",$1";}
}
else
{ if($found==1)
{print ("\n");}
$found=0; $newword="";
print "$_\n";
}
}
close FILE;
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询