Vig*_*ran 5 css regex comments regex-negation
我想这是对我之前类似问题的更新,但它变得太长了.
我试图理解在w3.org中给出的与css评论相符的正则表达式,并得到了这个疑问
他们为什么用
\/\*[^*]*\*+([^/*][^*]*\*+)*\/
----------------^
Run Code Online (Sandbox Code Playgroud)
而不仅仅是
\/\*[^*]*\*+([^/][^*]*\*+)*\/
Run Code Online (Sandbox Code Playgroud)
?
两者的工作方式类似.他们为什么在那里有一颗额外的明星?
我们来看看这部分:
\*+([^/*][^*]*\*+)*
-A- --B-- -C-
Run Code Online (Sandbox Code Playgroud)
正则表达式引擎将解析A部分并匹配所有星星,直到没有更多星星或有换行符.因此,一旦A完成,下一个字符必须是换行符或其他任何不是星号的字符.那么为什么不使用[^/]它们[^/*]呢?
另请参阅重复捕获组.
([任何一个不是/或*的字符] [零个或多个字符不是*] [一个或多个星星])
它捕获以至少一个或多个星星结尾的字符组.所以C将把所有明星留下B而没有星星在下一轮比赛.
所以B部分根本没有机会见到任何一个明星.这就是为什么我认为没有必要在那里放一颗星.
但是那个正则表达式在w3.org中,所以我猜我的理解可能是错的.请解释一下我缺少的东西.
这已在CSS3 语法模块中得到纠正:
\/\*[^*]*\*+([^/][^*]*\*+)*\/ /* ignore comments */
Run Code Online (Sandbox Code Playgroud)
请注意,无关的星号已消失,使该表达式与您所拥有的相同。
所以看起来这只是他们在编写 CSS2 语法时犯的一个错误。我正在挖掘邮件列表档案,看看是否有任何相关的讨论。