2009-10-24 63 views
0

我想掃描一個css文件並捕獲註釋和css。我想出了一個正則表達式這是幾乎沒有,但是,因爲它遺漏了性能不是很完美的與多個聲明,即用正則表達式解析css

ul.menu li a, # Won't capture this line 
ul.nice-menu li a { text-decoration: none; cursor:pointer; } 

下面是我的工作,正則表達式:

(\/\*[^.]+\*\/\n+)?([\t]*[a-zA-Z0-9\.# -_:@]+[\t\s]*\{[^}]+\}) 

我一直在rubular.com上測試它,這裏是它當前匹配的內容,以及數組輸出的內容。

結果1

[0] /* Index */ 
/* 
GENERAL 

PAGE REGIONS 
- Header bar region 
- Navigation bar region 
- Footer region   
SECTION SPECIFIC 
- Homepage 
- News */ 

[1] html { background: #ddd; } 

結果2

[0] 
[1] body { background: #FFF; font-family: "Arial", "Verdana", sans-serif; color: #545454;} 

我必須指出,我仍然是一個新的,當涉及到正則表達式,因此,如果有人可以幫助並顯示在那裏我」要去錯了,這將會是非常讚賞:)

BTW: 我使用PHP和preg_match_all

+1

你能定義你想要的輸出類型嗎? 「你想要的CSS和評論」是全球性的,以確定你想要什麼。指定某種數組 – 2009-10-24 14:25:21

+0

我已經添加了期望的輸出目前喜歡的問題,希望這可以幫助:) – Damian 2009-10-24 14:46:05

回答

6

CSS無法用正則表達式完全解析(請參閱CSS語法:http://www.w3.org/TR/CSS2/grammar.html)。例如,{...}可以按行分割,而您當前的版本不能處理這個問題。如果你需要這樣做,你應該閱讀CSS規範並使用像ANTLR這樣的工具來生成解析器。

這裏是W3C規範(http://www.w3.org/TR/CSS2/syndata.html)的例子:

@import "subs.css"; 
@import "print-main.css" print; 
@media print { 
    body { font-size: 10pt } 
} 
h1 {color: blue } 

不正常的正則表達式是強大到足以應付嵌套{...}等更不用說進口樣式表的內容。

+0

刪除所有換行符,他就會安全! – mauris 2009-10-24 14:32:23

+0

@Mauris然後會有一條線。 – 2009-10-24 14:34:15

+1

@Mauris他不會。只是想到「{」註釋,字符串,......他肯定應該使用專門的CSS解析器。 – 2009-10-24 14:36:43

0

你在用什麼語言?

你應該使用一個庫來解析CSS。圖書館可以爲你節省很多的痛苦。

+0

我正在使用PHP和preg_match_all – Damian 2009-10-24 14:48:04

+2

@Damian:已經有PHP CSS解析器。 – PhiLho 2009-10-24 15:16:52