[英]Perl regex to parse CSS
我有一個典型的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
。
該怎么辦?
使用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;
}
或者,您可以使用一個叫做CSS的CSS 。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.