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 に答える