自从我对cssparser的糟糕体验以来,我已经设定了使用Parboiled在Java中实现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
答案 0 :(得分:4)
请注意,在字符类内部,除了escape之外,所有正则表达式运算符都会失去其特殊含义 ('\')和字符类操作符' - ',']'和at 课程的开头,'^'。
现在,根据W3C,?
can be used as a kind of wildcard:
?
字符表示“任何数字值”(例如U + 4 ??)