Or运算符(|)不能用C语言正则表达式,它总是给输出匹配,如果我也提供错误的输入" 12"或" 123"或c显示为MATCH。在这种情况下我会请求帮助。
#include <sys/types.h>
#include <regex.h>
#include <stdio.h>
int main(int argc, char *argv[]){ regex_t regex;
int reti;
char msgbuf[100];
/* Compile regular expression */
reti = regcomp(®ex, "1 | 2c | 3c", REG_EXTENDED);
if( reti ){ fprintf(stderr, "Could not compile regex\n"); return(1); }
/* Execute regular expression */
reti = regexec(®ex, "123", 0, NULL, 0);
if( !reti ){
puts("Match");
}
else if( reti == REG_NOMATCH ){
puts("No match");
}
else{
regerror(reti, ®ex, msgbuf, sizeof(msgbuf));
fprintf(stderr, "Regex match failed: %s\n", msgbuf);
return 1;
}
/* Free compiled regular expression if you want to use the regex_t again */
regfree(®ex);
return 0;
}
答案 0 :(得分:0)
您的正则表达式1 | 2c | 3c
与1
中的I have 1 dollar
匹配,但是根据您的评论,我认为您需要匹配整个字符串,而不仅仅是其中的一部分。为此,您需要使用仅在使用^
标志时才起作用的锚$
(字符串的开头)和REG_EXTENDED
(字符串的结尾)。
当您使用替代品时,您需要重复锚点,或者在括号的帮助下设置一个组:
^1$|^2c$|^3c$
或
^(1|2c|3c)$
这些表达式will safely match whole strings,例如1
,2c
或3c
。