我发现这个正则表达式代码在w3.org的CSS grammar页面中找到了评论。
\/\*[^*]*\*+([^/*][^*]*\*+)*\/
这很长很难理解。我只是把
\/\*.*\*\/
查找评论,但是当我在RegexPal中测试时,它会找到单行注释而不是多行注释,而原始正则表达式可以找到所有类型的注释。
我不明白是什么
+([^/*][^*]*\*+)*
部分在原始正则表达式中。谁能解释一下这个?
答案 0 :(得分:15)
令牌解释令牌:
\/ <- an escaped '/', matches '/'
\* <- an escaped '*', matches '*'
[^*]* <- a negated character class with quantifier, matches anything but '*' zero or more times
\*+ <- an escaped '*' with quantifier, matches '*' once or more
( <- beginning of group
[^/*] <- negated character class, matches anything but '/' or '*' once
[^*]* <- negated character class with quantifier, matches anything but '*' zero or more times
\*+ <- escaped '*' with quantifier, matches '*' once or more
)* <- end of group with quantifier, matches group zero or more times
\/ <- an escaped '/', matches '/'
答案 1 :(得分:6)
您的原因只发现单行注释,在典型的正则表达式中,.
匹配除了换行符之外的任何 ;而另一个使用一个否定的字符类,它匹配除指定字符之外的任何字符,因此可以匹配换行符。
但是,如果您要解决这个问题(通常选择多线或&#34;就像单线&#34;匹配一样),您会发现它与{{1}匹配对最后一条评论的/*
的第一条评论;您必须使用非贪婪量词,*/
来匹配不超过一条评论。
但是,您提供的更复杂的正则表达式甚至比这更复杂。根据nikc.org的回答,我认为应该强制执行“评论可能不会嵌套”的限制;也就是说,它们不得包含.*?
。在允许注释/*
的其他语言中(即,内部/ *既不被禁止也不是嵌套注释),模式/* like /* this */
将适合于匹配它们。