查找CSS注释的正则表达式中不必要的星号

时间:2012-05-15 10:45:51

标签: css regex comments regex-negation

我认为这是对previous similar question的更新,但它变得太长了。

我试图理解w3.org中给出的与css评论相符的正则表达式并得到了这个疑问

为什么要使用

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

而不仅仅是

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

两者的工作方式相似。他们为什么在那里有一颗额外的星?

  1. 让我们来看看这部分:

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

    正则表达式引擎将解析A部分并匹配所有星星,直到没有更多星星或有换行符。因此,一旦A完成,下一个字符必须是换行符或其他任何不是星号的字符。那么为什么不使用[^/]而使用[^/*]

  2. 同时查看重复捕获组。

    ([任何一个字符不是/或*] [零个或多个字符不是*] [一个或多个星星])

    它捕获以至少一个或多个星星结尾的字符组。所以C将把所有明星留下B而没有明星在下一轮比赛。

    所以B部分根本没有机会见到任何明星。这就是为什么我认为没有必要在那里放一颗星。

  3. 但是那个正则表达式在w3.org中,所以我想我的理解可能是错的。请解释我错过的内容。

1 个答案:

答案 0 :(得分:3)

这已在CSS3 Syntax module

中得到纠正
\/\*[^*]*\*+([^/][^*]*\*+)*\/   /* ignore comments */

请注意,无关的星号已经消失,使得此表达式与您拥有的相同。

因此,在为CSS2编写语法时,似乎只是一个错误。我正在挖掘邮件列表档案,看看那里是否有任何相关的讨论。