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你能给我看一下示例吗?因为它只会在最后一个实例中停止。对不起,你完全正确。。。我有更多的代码,但没有更多的在我的正则表达式测试。。对不起,那是因为*
太贪婪了。