Regex 为什么正则表达式将组的结尾与第二个匹配匹配?

Regex 为什么正则表达式将组的结尾与第二个匹配匹配?,regex,Regex,我不明白为什么会出现以下正则表达式: CHANGES:(.|\n)*(\*\/) 匹配到第二个注释结束(*/),而不是以下块中的第一个注释结束: /* ysqwwqdeqwd Some general start comments and code description DESCRIPTION: Interface for c CHANGES: $Log: blala.h,v $ Revision 1.7 2008/09/08 18:34:43

我不明白为什么会出现以下正则表达式:

CHANGES:(.|\n)*(\*\/)
匹配到第二个注释结束(
*/
),而不是以下块中的第一个注释结束:

 /* ysqwwqdeqwd 
 Some general start comments and code description

 DESCRIPTION:

    Interface for c

 CHANGES:

    $Log: blala.h,v $
    Revision 1.7  2008/09/08 18:34:43  p
    Updated copyright year.
 */

#define startofcode yeah

/* General include files for Object Oriented C code.
 */
#include "oo.h"
#include "const.h"
#include "libmath.h"
在这里我们可以得到:

CHANGES:
    ...

 */

#define startofcode yeah

/* General include files for Object Oriented C code.
 */
而不仅仅是:

CHANGES:
        ...

     */
这里的背景是,我试图从一堆不再需要的
.h
文件的顶部删除一堆旧的CVS样式的svn提交日志

CHANGES:(.|\n)*?(\*\/)

              ^^
您需要
非贪婪的
正则表达式。请参阅演示。当您使用
贪婪的
正则表达式时,它将在
*/
的最后一个实例停止。当您使用非贪婪的正则表达式时,它将在
*/
的第一个实例停止。*是贪婪的,并且将尽可能多地消耗


你对原因有一个简短的解释吗?事实上,作为进一步的问题,该文件中还有更多的
*/
,为什么它会在第二个文件中停止?@Ben你能给我看一下示例吗?因为它只会在最后一个实例中停止。对不起,你完全正确。。。我有更多的代码,但没有更多的在我的正则表达式测试。。对不起,那是因为
*
太贪婪了。