我尝试在C语言中研究REGEX,并尝试理解,但是我对字符串类型的模式感到麻烦。在此程序中,我要验证字符串输入是否为数字(仅数字数字,而不是字符,空格或特殊字符)
#include<stdio.h>
#include <regex.h>
void print_result(int return_value){
if (return_value == 0){
printf("Pattern found.\n");
}
else if (return_value == REG_NOMATCH){
printf("Pattern not found.\n");
}
else{
printf("An error occured.\n");
}
}
int main() {
regex_t regex;
int return_value;
int return_value2;
return_value = regcomp(®ex,"[^a-fA-F_][0-9]+",0);
return_value = regexec(®ex, "4324", 0, NULL, 0);
return_value2 = regcomp(®ex,"\d+",0);
return_value = regexec(®ex, "4324", 0, NULL, 0);
print_result(return_value); //not found
print_result(return_value); //no found
print_result(return_value2);
return 0;
}
您能给我一些想法来验证输入吗?我想找到另一种不使用ASCII值的方法
如果在regcomp
中将标志指定为0:
return_value = regcomp(®ex,"[^a-fA-F_][0-9]+",0);
然后您接受默认的正则表达式语法,即所谓的Basic Regular Expression (BRE)。关于BRE的唯一明智的说法是“不要使用它们”。始终(至少)指定REG_EXTENDED
标志,然后您将使用正则表达式语法,该语法至少与您期望的传递相似。 (否则,您的字符串将被技术上称为“倾斜木材”的支配:\
字符,这些字符可在正则表达式中启用元字符,以及更多的\
字符,以便您所需的\
字符在字符串。)
查看man regexec和man 7 regex了解更多详细信息。确保您通读了第二个链接(尽管您可以忽略基本的正则表达式语法:-),因为在更现代的正则表达式库中有很多常用语法,而Posix正则表达式中甚至没有扩展语法。 (其中包括在第二个正则表达式中使用的\d
。Posix具有命名的字符类,例如[[:digit:]]
。)