我正在研究解析CSS樣式聲明文件的工具。它使用了一個非常複雜的正則表達式,除了預期的性能問題和一些現在不影響我的小錯誤之外,我正在做所有我希望它做的事情,除了一件事情。重疊匹配的多行正則表達式
我把它匹配的元素的名稱,類別,子類,僞類等的所有組合然而,當行包含不止一個聲明,我只能得到它匹配一次。作爲一個例子,這裏的東西是絆倒我此刻的那種:
td.class1, td.class2, td.class3
{
background-color: #FAFAFA;
height: 10px;
}
我能寫,能滿足這所有三個聲明的表達,但因爲我也是經過捕獲信息它(括號內的實際樣式信息)我覺得整個文本塊被認爲是佔了的,因此引擎會移動到剛處理過的整個塊之後的下一個字符。
有沒有辦法做到這一點,每個類將是一個單獨的比賽,並都將包括如下以及風格的信息?我知道我可以修改我的正則表達式來匹配整行,然後在得到我的匹配之後解析它的逗號,但如果可能的話,我想將所有邏輯保留在表達式本身內。
如果它與答案是絕對相關的,但是表達式是巨大/醜陋的(因爲所有非平凡的正則表達式都是這樣)並且代碼是一點點的,我可以發佈表達式和/或用於生成它的註釋代碼冗長。
匹配組可以被命名,而這正是我已經在做的。我可以匹配並提取類名和類體......這不是問題。我的問題是,我正在尋找一種方法來匹配多個共享公共主體的類名。我可能無法做到,所以我會匹配整條線並在逗號處分割。 – Rich 2009-04-17 21:41:41
沒錯,我要說的是,使用像上面那樣的模式應該爲你做這件事, lookahead正在做的是允許你向前掃描類體,並且(如果捕獲工作)提取它,*不*移動正則表達式的實際當前位置,所以它可以繼續匹配類名稱。 – chaos 2009-04-17 21:46:16
你的模式並不完全匹配,但在未來展望中捕獲的想法是最終成功的。我一開始並沒有明白。 +1 – Rich 2009-04-20 15:53:16