2011-12-28 62 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