Perl正则表达式解析CSS

时间:2013-03-22 19:42:26

标签: regex perl

我有一个典型的CSS文件格式:

.success {
    color: #8FA442;
    border: 1px solid #C2D288;
}
.error {
    color: #b3696c;
    border: 1px solid #f7c7c9;
}

我希望匹配每个样式名称和{}中的内容。我得到了{}部分,并且能够轻松地解析内容,但是,问题是样式名称可以是数组(例如#contactform .input, .textarea)并且我想捕获整个事物,事实上所有事情都是从前一次关闭}。

我尝试的是

的不同变体

m/\}(.+)(\{.+?\})/g

但这抓住了整个文件。如果我做

$doc =~ m/(\w+)\s+(\{.+?\})/g

可以捕获每个样式{},但只有名称的最后一个标记,因此对于#contactform .input, .textarea,它只会捕获.textarea

怎么办?

2 个答案:

答案 0 :(得分:5)

请改用CSS::DOM。简单的正则表达式模式不太可能证明与任务相同。

#!/usr/bin/env perl

use 5.012;
use strict;
use warnings;

use CSS::DOM;

my $css = my $sheet = CSS::DOM::parse(do {local $/; <DATA>});
my $rules = $css->cssRules;

for my $rule ( @$rules ) {
    say $rule->selectorText;
}

__DATA__
#contactform  .success {
    color: #8FA442;
    border: 1px solid #C2D288;
}
.error {
    color: #b3696c;
    border: 1px solid #f7c7c9;
}

答案 1 :(得分:1)

或者你可以使用名为CSS的那个。