如何使用正则表达式用C语言验证从键盘输入的数据是实数?
我试图研究C中的正则表达式并试图理解它,但我对字符串类型的模式有困难。 在这个程序中,我想验证字符串输入是一个数字(只有数字,而不是字符、空格或特殊字符)如何使用正则表达式用C语言验证从键盘输入的数据是实数?,c,regex,C,Regex,我试图研究C中的正则表达式并试图理解它,但我对字符串类型的模式有困难。 在这个程序中,我想验证字符串输入是一个数字(只有数字,而不是字符、空格或特殊字符) #包括 #包括 无效打印结果(整数返回值){ if(返回值=0){ printf(“找到模式。\n”); } else if(返回值==REG\u NOMATCH){ printf(“找不到图案。\n”); } 否则{ printf(“发生错误。\n”); } } int main(){ regex_t regex; int返回值; int返
#包括
#包括
无效打印结果(整数返回值){
if(返回值=0){
printf(“找到模式。\n”);
}
else if(返回值==REG\u NOMATCH){
printf(“找不到图案。\n”);
}
否则{
printf(“发生错误。\n”);
}
}
int main(){
regex_t regex;
int返回值;
int返回_值2;
返回值=regcomp(®ex,“[^a-fA-F][0-9]+”,0);
return_value=regexec(®ex,“4324”,0,NULL,0);
返回值2=regcomp(®ex,“\d+”,0);
return_value=regexec(®ex,“4324”,0,NULL,0);
打印结果(返回值);//未找到
打印结果(返回值);//未找到
打印结果(返回值2);
返回0;
}
你能给我一些想法来验证输入吗。如果在
regcomp
中指定标志为0,我想找到另一种不使用ASCII值的方法:
return_value = regcomp(®ex,"[^a-fA-F_][0-9]+",0);
然后您接受默认的正则表达式语法,这就是所谓的。关于BRE,唯一明智的说法是“不要使用它们”。始终指定REG\u EXTENDED
标志(至少),然后您将使用一个正则表达式语法,该语法至少与您期望的语法有一点相似之处。(否则,字符串将由技术上称为“倾斜木材”的字符控制:\
字符在正则表达式中启用元字符,以及更多的\
字符,以便所需的\
字符在字符串中不被视为转义字符。)
请查看和以了解更多详细信息。请确保仔细阅读第二个链接(尽管您可以忽略基本正则表达式语法:-),因为在更现代的正则表达式库中有许多常用的语法,这些语法在Posix正则表达式中不存在,甚至在扩展正则表达式中也不存在。(其中包括第二个正则表达式中使用的
\d
。Posix已命名字符类,例如[[:digit:]
)如果在regcomp
中指定标志为0:
return_value = regcomp(®ex,"[^a-fA-F_][0-9]+",0);
然后您接受默认的正则表达式语法,这就是所谓的。关于BRE,唯一明智的说法是“不要使用它们”。始终指定REG\u EXTENDED
标志(至少),然后您将使用一个正则表达式语法,该语法至少与您期望的语法有一点相似之处。(否则,字符串将由技术上称为“倾斜木材”的字符控制:\
字符在正则表达式中启用元字符,以及更多的\
字符,以便所需的\
字符在字符串中不被视为转义字符。)
请查看和以了解更多详细信息。请确保仔细阅读第二个链接(尽管您可以忽略基本正则表达式语法:-),因为在更现代的正则表达式库中有许多常用的语法,这些语法在Posix正则表达式中不存在,甚至在扩展正则表达式中也不存在。(这包括第二个正则表达式中使用的
\d
。Posix命名了字符类,例如[[:digit:]]
)你能给我一些想法来解决这个问题吗同样,我不确定我是否理解被否定的字符类的意图[^a-fA-F][/code>对不起[^a-fA-F]
,我在StackOver中播种它,并将其复制到我的代码中,以尝试修复此问题。我也不确定,我们可以把它改成“[^a-zA-Z](没有单词)你能给我一些想法来解决这个问题吗?同样,我不确定我是否理解否定字符类的意图[^a-fA-F.]
很抱歉[^a-fA-F.]
,我把它放在堆栈中并复制到我的代码中,试图解决这个问题。我也不确定,我们可以将其更改为“[^a-zA-Z](无单词)。您可以检查字符串是否仅由字符组成,而无需使用正则表达式库。您可以检查字符串是否仅由字符组成,而无需使用正则表达式库。