Что это ? имеется в виду в разделе токенизации спецификации CSS W3C? - PullRequest
6 голосов
/ 28 декабря 2011

Со времени моего ужасного опыта работы с cssparser я поставил себе задачу реализовать синтаксический анализатор CSS в Java, используя Parboiled . У меня уже есть все спецификации цвета, но, конечно, мне нужно все остальное ...

Итак, я пошел искать CSS-спецификацию и нашел ее на сайте W3C . Сейчас я нахожусь в процессе написания правил для всех «атомов», но обнаружил что-то тревожное в этом разделе :

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

Часть, которая беспокоит меня, это вопросительный знак в [0-9a-f?].

В заголовке параграфа говорится, что здесь используются регулярные выражения в стиле Lex. ? не имеет особого значения в классе символов (спасибо @scizzo за подтверждение). Итак, это опечатка в спецификации W3C, или ? действительно разрешено в диапазоне Unicode? Если да, что это значит?

Завершение : У меня есть ответ. Тем не менее, спецификация неверна: : «диапазон Юникода с вопросительным знаком» может быть только сам по себе. Учитывая приведенное выше регулярное выражение, это выражение будет разрешено, тогда как оно явно недопустимо: u+4??-733f

1 Ответ

4 голосов
/ 28 декабря 2011

Да, это буквальный знак вопроса. Из документации Flex :

Обратите внимание, что внутри символьного класса все операторы регулярных выражений теряют свое особое значение, кроме escape ('\') и операторы класса символов, '-', ']' и, в начало класса, '^'.

Теперь, согласно W3C, ? может использоваться как своего рода подстановочный знак :

? символов означают «любое цифровое значение» (например, U + 4 ??)

...