我有一个典型的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
。
怎么办?
答案 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的那个。