5

我想问这个作为我之前类似问题的更新,但它变得太长了。

我试图理解w3.org中给出的与 css 注释匹配的正则表达式并得到了这个疑问

他们为什么使用

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

而不仅仅是

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

?

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

  1. 我们来看看这部分:

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

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

  2. 另请查看重复捕获组。

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

    它捕获以至少一个或多个星号结尾的字符组。因此,C 将在下一轮将 B 中没有星星的所有星星都带走。

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

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

4

1 回答 1

4

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

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

请注意,多余的星号已消失,使此表达式与您所拥有的相同。

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

于 2012-05-15T11:30:26.560 回答