我想问这个作为我的 previous similar question 的更新但它变得太长了。
我试图理解 w3.org 中给出的正则表达式匹配 css 注释并产生疑问
他们为什么使用
\/\*[^*]*\*+([^/*][^*]*\*+)*\/
----------------^
不仅仅是
\/\*[^*]*\*+([^/][^*]*\*+)*\/
?
两者的工作原理相似。为什么他们那里多了一颗星?
让我们看看这部分:
\*+([^/*][^*]*\*+)* -A- --B-- -C-
Regex 引擎将解析 A 部分并匹配所有的星星,直到没有更多的星星或出现换行符。因此,一旦 A 完成,下一个字符必须是换行符或其他任何不是星号的字符。那为什么他们不使用
[^/]
而使用[^/*]
?同时查看重复捕获组。
([不是/或 * 的任何 一个 字符][不是 * 的零个或多个字符][一颗或多颗星])
它捕获以至少一颗或多颗星结尾的字符组。所以 C 将拿走所有的星星,让 B 在下一轮没有星星可以匹配。
所以B部分根本没有机会见到任何明星。这就是为什么我认为没有必要在那里放一颗星。
但是那个正则表达式在 w3.org 中,所以我想我的理解可能是错误的。请解释我遗漏了什么。
最佳答案
这已在 CSS3 Syntax module 中得到更正:
\/\*[^*]*\*+([^/][^*]*\*+)*\/ /* ignore comments */
请注意,多余的星号不见了,使这个表达式与您所拥有的完全相同。
所以看起来这只是他们在编写 CSS2 语法时的一个错误。我正在挖掘邮件列表文件,看看那里是否有任何相关的讨论。
关于css - 查找 CSS 注释的正则表达式中不必要的星号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10599089/