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