基本上我在我的C程序中使用以下模式(参见Regular expression matching an infinite pattern):
^[0-9]( [0-9])*$
使用以下代码:
char *pattern = "^[0-9]( [0-9])*$";
regex_t regexCompiled;
int rc = regcomp(®exCompiled, pattern, REG_EXTENDED);
if (rc != 0) {
char msgbuf[100];
regerror(rc, ®exCompiled, msgbuf, sizeof (msgbuf));
fprintf(stderr, "Regex match failed: %s\n", msgbuf);
exit(EXIT_FAILURE);
}
if (regexec(®exCompiled, "0 1", 0, NULL, REG_EXTENDED) == 0) {
printf("Valid\n");
} else {
printf("Invalid\n");
}
我执行字符串“0 1”,这对模式有效,但不起作用。 '^'和'$'无效。这是为什么?我怎样才能让它发挥作用?
您将REG_EXTENDED
传递给regexec()
,这不是该呼叫的有效标志。
eflags可以是
REG_NOTBOL
和REG_NOTEOL
中的一个或两个的按位或者两者,其引起下面描述的匹配行为的改变。
可能REG_EXTENDED
的实际价值与其中一个匹配。
更改代码以将0
作为regexec()
的最终参数传递使其匹配。