如何使用Perl搜索CSS?

god*_*yan 1 css perl search

来自长期用户的第一个问题.

我正在编写一个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)

Mic*_*man 5

既然你问的意见(这是不是一个编码服务),我会提供的只是这一点.

始终使用限制和警告:

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)

  • 请记住,并非所有 CSS 元素都是多行的。许多简单的情况在一行上声明多个属性。例如: * { 边距:0; 填充:0;} (2认同)