为什么正则表达式" ^ [0-9] | 1 [1-2]"匹配" 13"或" 33"或" 5632"或...?
#include <stdio.h>
#include <regex.h>
main() {
regex_t regex;
char *reg = "^[0-9]|1[0-2]";
int reti = regcomp(®ex,reg, REG_NEWLINE | REG_EXTENDED);
char *meses[] = {"enero","enero","febrero","marzo","abril",
"mayo","junio","julio","agosto","setiembre",
"octubre","noviembre","diciembre"};
char mes[3];
puts("Ingrese numero de mes [1-12]:");
fgets(mes,sizeof(mes),stdin);
if(!regexec(®ex, mes, 0, NULL, 0)) printf("El mes es: %s\n",meses[atoi(mes)]);
return(0);
}
答案 0 :(得分:2)
你的正则表达式需要一些调整。
你必须使用这个正则表达式
^([0-9]|1[1-2])$
<强> Working demo 强>
交替运算符(或OR运算符)具有所有正则表达式运算符的最低优先级。所以,你匹配
^[0-9]
or
1[1-2]
这就是为什么你匹配1
中的13
,3
中的33
或5
中的5632
。
另一方面,使用此正则表达式^([0-9]|1[1-2])$
,您将匹配0
到9
或11
到12
的数字,这要归功于锚点({ {1}}和^
)以及括号的用法。
修改:在 Maarten 评论时,您的正则表达式也错过了10月,因此您需要将其调整为:
$