Posix正则表达式捕获组匹配序列

我在ac程序中有以下文本字符串和正则表达式模式:

char text[] = "        identification     division. "; 
char pattern[] = "^(.*)(identification *division)(.*)$"; 

使用regexec()库函数,我得到了以下结果:

String:         identification     division. 
Pattern: ^(.*)(identification *division)(.*)$ 
Total number of subexpressions: 3 

OK, pattern has matched  ... 

begin: 0, end: 37,match:         identification     division. 
subexpression 1 begin: 0, end: 8, match: 
subexpression 2 begin: 8, end: 35, match: identification     division 
subexpression 3 begin: 35, end: 37, match: . 

我想知道,因为正则表达式引擎以贪婪的方式匹配,并且第一个捕获组(。*)匹配任意数量的字符(除了新行字符),为什么它不匹配字符一直到文本字符串中的末尾直到'。')反对只匹配前8个空格?

每个捕获组必须匹配吗?

捕捉组如何匹配文本字符串是否有任何规则?

谢谢。


正如你所说的,如果贪婪组(。*)已经占用整个字符串,那么正则表达式的其余部分将没有任何匹配,这将不会使您的正则表达式匹配字符串。 所以,是的,每个捕获组(和其他模式部分)需要匹配。 这正是你在正则表达式中指定的内容。

尝试使用下面的字符串,然后用一个不情愿的和贪婪的第一组运行代码,您将看到不同之处。

char text[] = "    identification  division    identification     division. ";

正则表达式尽可能贪婪,而不太贪婪。 如果左派团体如你所期望的那样贪婪,那么匹配“身份识别部门”的团队将无法匹配,并且会错误地拒绝text ,这显然是用语言表达的。

链接地址: http://www.djcxy.com/p/74833.html

上一篇: Posix regex capture group matching sequence

下一篇: Regex to match any character including new lines