Ненужная звездочка в регулярном выражении, которое находит комментарий CSS

Я думал задать это как обновление моего предыдущего аналогичного вопроса, но он стал слишком длинным.

Я пытался понять регулярное выражение, указанное в w3.org, которое соответствует css комментарии и возникли сомнения

Почему они используют

\/\*[^*]*\*+([^/*][^*]*\*+)*\/
----------------^

вместо того, чтобы просто

\/\*[^*]*\*+([^/][^*]*\*+)*\/

?

Оба работают одинаково. Почему у них там лишняя звезда?

  1. Давайте посмотрим на эту часть:

    \*+([^/*][^*]*\*+)*
    -A- --B--     -C-
    

    Механизм регулярных выражений будет анализировать часть A и сопоставлять все звезды до тех пор, пока не будет БОЛЬШЕ звезд или не будет разрыва строки. Итак, как только A выполнено, следующим символом должен быть разрыв строки или что-то еще, кроме звезды. Тогда почему вместо [^/] они использовали [^/*]?

  2. Также посмотрите на повторяющуюся группу захвата.

    ([любой один символ, отличный от / или *][ноль или более символов, кроме *][одна или несколько звездочек])

    Он захватывает группы символов, оканчивающихся как минимум на одну или несколько звезд. Таким образом, C заберет все звезды, оставив B без звезд, чтобы соответствовать в следующем раунде.

    Таким образом, у части B вообще не будет шанса встретиться со звездами. Поэтому я думаю, что звезду там ставить не надо.

Но это регулярное выражение находится на w3.org, поэтому я думаю, что мое понимание может быть неправильным. Пожалуйста, объясните, что мне не хватает.


person Vigneshwaran    schedule 15.05.2012    source источник


Ответы (1)


Это уже исправлено в модуле синтаксиса CSS3:

\/\*[^*]*\*+([^/][^*]*\*+)*\/   /* ignore comments */

Обратите внимание, что посторонняя звездочка исчезла, что делает это выражение идентичным тому, что у вас есть.

Так что может показаться, что это была просто ошибка с их стороны при написании грамматики для CSS2. Я копаюсь в архивах списков рассылки, чтобы посмотреть, есть ли там какое-либо обсуждение, которое могло бы иметь отношение к делу.

person BoltClock    schedule 15.05.2012
comment
МОЙ БОГ! Так что я был прав (и поздно узнал). Я только подумал, что они, должно быть, правы, и исчерпал свой разум, пытаясь найти то, что мне не хватает. Я не думал, что это было бы изменено в CSS3. Спасибо. - person Vigneshwaran; 15.05.2012
comment
Да. Я жду вашей ссылки на любое соответствующее обсуждение. - person Vigneshwaran; 15.05.2012
comment
ничего не могу найти :/ - person BoltClock; 15.05.2012
comment
Я только что вставил регулярное выражение в их расширенный поиск и нашел только этот результат: lists.w3.org/Archives/Public/public-mobileok-checker/2007Sep/ Но я не понимаю, о чем они говорят. Ладно, все равно спасибо. - person Vigneshwaran; 15.05.2012
comment
@Vigneshwaran: Это обсуждение не связано с самой грамматикой, поэтому вы можете его игнорировать. - person BoltClock; 15.05.2012