【问题标题】:Unnecessary asterisk in regex that finds CSS comment查找 CSS 注释的正则表达式中不必要的星号
【发布时间】:2012-05-22 20:49:22
【问题描述】:

我想问这个作为我previous similar question 的更新,但它变得太长了。

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

他们为什么使用

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

而不仅仅是

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

?

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

  1. 让我们看看这部分:

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

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

  2. 还要查看重复捕获组。

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

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

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

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

【问题讨论】:

    标签: css regex comments regex-negation


    【解决方案1】:

    这已在CSS3 Syntax module 中得到纠正:

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

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

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

    【讨论】:

    • 天啊!所以我是对的(而且发现晚了。)我只认为他们一定是对的,我筋疲力尽地试图找到我所缺少的东西。我不认为它会在 CSS3 中改变。谢谢。
    • 是的。我正在等待您链接到任何相关讨论。
    • 我似乎找不到任何东西:/
    • 我刚刚在他们的高级搜索中粘贴了正则表达式,发现只有这个结果:lists.w3.org/Archives/Public/public-mobileok-checker/2007Sep/… 但我不明白他们在说什么。好的,谢谢。
    • @Vigneshwaran:这个讨论与语法本身无关,所以你可以忽略它。
    猜你喜欢
    • 2018-07-08
    • 2012-05-20
    • 2014-01-27
    • 1970-01-01
    • 2018-07-23
    • 1970-01-01
    • 2015-03-04
    • 2014-10-15
    • 1970-01-01
    相关资源
    最近更新 更多