来自长期用户的第一个问题.
我正在编写一个Perl脚本,它将遍历许多HTML文件,逐行搜索"color:"或"background-color:"(CSS标签)的实例,并在它打印整行时遇到其中一个实例.这非常简单.
现在我承认我还是一个初学程序员,所以下一部分可能非常明显,但这就是我来到这里的原因:).
我想要它做的是当它找到"color:"或"background-color:"的实例时,我希望它追溯并找到元素的名称,并打印它.例如:
如果我的文档包含以下CSS:
.css_class {
font-size: 18px;
font-weight: bold;
color: #FFEFA1;
font-family: Arial, Helvetica, sans-serif;
}
Run Code Online (Sandbox Code Playgroud)
我希望脚本输出如下内容:
css_class,#FFEFA1
Run Code Online (Sandbox Code Playgroud)
理想情况下,它会将其输出为文本文件.
我非常感谢有关此事的任何建议!
到目前为止,这是我的完整脚本:
$color = "color:";
open (FILE, "index.html");
@document = `<FILE>`;
close (FILE);
foreach $line (@document){
if($line =~ /$color/){
print $line;
}
}
Run Code Online (Sandbox Code Playgroud)
既然你问的意见(这是不是一个编码服务),我会提供的只是这一点.
始终使用限制和警告:
use strict;
use warnings;
Run Code Online (Sandbox Code Playgroud)
始终检查open通话的返回值:
open(FILE, 'filename') or die "Can't read file 'filename' [$!]\n";
Run Code Online (Sandbox Code Playgroud)
使用三个arg形式的open和lexical文件句柄而不是globs:
open(my $fh, '<', 'filename') or die "Can't read file 'filename' [$!]\n";
Run Code Online (Sandbox Code Playgroud)
当逐行处理时,不要啜饮:
while (my $line = <$fh>) {
# do something with $line
}
Run Code Online (Sandbox Code Playgroud)
使用反向引用从正则表达式匹配中检索数据:
if ($line =~ /color *: *(#[0-9a-fA-F]{6})/) {
# color value is in $1
}
Run Code Online (Sandbox Code Playgroud)
将类名保存在临时变量中,以便在匹配颜色时使用它:
if ($line =~ /^.(\w+) *\{/) {
$class = $1;
}
Run Code Online (Sandbox Code Playgroud)