0

我有一个典型的 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.

该怎么办?

4

2 回答 2

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;
}
于 2013-03-22T19:45:13.477 回答
1

或者您可以使用刚刚称为CSS的那个。

于 2013-03-22T19:45:26.917 回答