我想问这个作为我之前类似问题的更新,但它变得太长了。
我试图理解w3.org中给出的与 css 注释匹配的正则表达式并得到了这个疑问
他们为什么使用
\/\*[^*]*\*+([^/*][^*]*\*+)*\/
----------------^
而不仅仅是
\/\*[^*]*\*+([^/][^*]*\*+)*\/
?
两者的工作方式相似。为什么他们那里有一颗额外的星星?
我们来看看这部分:
\*+([^/*][^*]*\*+)* -A- --B-- -C-
正则表达式引擎将解析 A 部分并匹配所有星号,直到没有更多星号或出现换行符。因此,一旦 A 完成,下一个字符必须是换行符或其他任何不是星号的字符。那为什么不使用
[^/]
他们使用的[^/*]
呢?另请查看重复捕获组。
([任何一个不是 / 或 * 的字符][零个或多个不是 * 的字符][一个或多个星号])
它捕获以至少一个或多个星号结尾的字符组。因此,C 将在下一轮将 B 中没有星星的所有星星都带走。
所以B部分根本没有机会见到任何明星。这就是为什么我认为没有必要在那里放一颗星。
但是那个正则表达式在 w3.org 中,所以我想我的理解可能是错误的。请解释我所缺少的。