Я думал задать это как обновление моего предыдущего аналогичного вопроса, но он стал слишком длинным.
Я пытался понять регулярное выражение, указанное в w3.org, которое соответствует css комментарии и возникли сомнения
Почему они используют
\/\*[^*]*\*+([^/*][^*]*\*+)*\/
----------------^
вместо того, чтобы просто
\/\*[^*]*\*+([^/][^*]*\*+)*\/
?
Оба работают одинаково. Почему у них там лишняя звезда?
Давайте посмотрим на эту часть:
\*+([^/*][^*]*\*+)* -A- --B-- -C-
Механизм регулярных выражений будет анализировать часть A и сопоставлять все звезды до тех пор, пока не будет БОЛЬШЕ звезд или не будет разрыва строки. Итак, как только A выполнено, следующим символом должен быть разрыв строки или что-то еще, кроме звезды. Тогда почему вместо
[^/]
они использовали[^/*]
?Также посмотрите на повторяющуюся группу захвата.
([любой один символ, отличный от / или *][ноль или более символов, кроме *][одна или несколько звездочек])
Он захватывает группы символов, оканчивающихся как минимум на одну или несколько звезд. Таким образом, C заберет все звезды, оставив B без звезд, чтобы соответствовать в следующем раунде.
Таким образом, у части B вообще не будет шанса встретиться со звездами. Поэтому я думаю, что звезду там ставить не надо.
Но это регулярное выражение находится на w3.org, поэтому я думаю, что мое понимание может быть неправильным. Пожалуйста, объясните, что мне не хватает.