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

Vig*_*ran 5 css regex comments regex-negation

我想这是对我之前类似问题的更新,但它变得太长了.

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

他们为什么用

\/\*[^*]*\*+([^/*][^*]*\*+)*\/
----------------^
Run Code Online (Sandbox Code Playgroud)

而不仅仅是

\/\*[^*]*\*+([^/][^*]*\*+)*\/
Run Code Online (Sandbox Code Playgroud)

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

  1. 我们来看看这部分:

    \*+([^/*][^*]*\*+)*
    -A- --B--     -C-
    
    Run Code Online (Sandbox Code Playgroud)

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

  2. 另请参阅重复捕获组.

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

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

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

但是那个正则表达式在w3.org中,所以我猜我的理解可能是错的.请解释一下我缺少的东西.

Bol*_*ock 4

这已在CSS3 语法模块中得到纠正:

\/\*[^*]*\*+([^/][^*]*\*+)*\/   /* ignore comments */
Run Code Online (Sandbox Code Playgroud)

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

所以看起来这只是他们在编写 CSS2 语法时犯的一个错误。我正在挖掘邮件列表档案,看看是否有任何相关的讨论。