2011-12-28 63 views
6

自從我對cssparser的糟糕經驗以來,我已經爲自己設定了使用Parboiled在Java中實現CSS解析器的任務。我已經涵蓋了所有的顏色規範,但當然我需要所有其他的...是什麼?是指在W3C CSS規範的標記化部分?

所以,我去尋找CSS規範,並在W3C website上找到它。我現在在所有的「原子」編寫規則的過程中,卻發現一些令人不安this section

UNICODE-RANGE u\+[0-9a-f?]{1,6}(-[0-9a-f]{1,6})? 

擾亂我是[0-9a-f?]問號的一部分。

段落標題說這裏使用的正則表達式是Lex風格的。 ?在角色類別中沒有特殊的含義(謝謝@scizzo的確認)。那麼,這是W3C規範中的一個錯誤,還是真的允許在一個Unicode範圍內使用??如果是,那是什麼意思?

總結:我有我的答案。但是,規範錯誤:「問號unicode範圍」只能由其本身。鑑於上述正則表達式,這個表達式將被允許,但它顯然是非法的:u+4??-733f

回答

4

是的,這是一個字面問號。 From the Flex documentation

注意,一個字符類的內部,所有的正則表達式運營商失去了其特殊的含義,除了逃跑 (「\」)和字符類運營商,「 - 」,「]」,並在 班級的開始,'^'。現在

,根據W3C,? can be used as a kind of wildcard

?字符暗示 '的任何數字值'(例如U + 4°)

+0

這是一回事確認,這意味着問號在Unicode範圍內必須是合法的......但我找不到它的含義:/ – fge 2011-12-28 02:45:02

+0

剛剛編輯過,但?基本上是一個通配符。 – sczizzo 2011-12-28 02:46:31

+0

非常感謝鏈接! – fge 2011-12-28 02:54:34