Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/70.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用正则表达式用C语言验证从键盘输入的数据是实数?_C_Regex - Fatal编程技术网

如何使用正则表达式用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返

我试图研究C中的正则表达式并试图理解它,但我对字符串类型的模式有困难。 在这个程序中,我想验证字符串输入是一个数字(只有数字,而不是字符、空格或特殊字符)

#包括
#包括
无效打印结果(整数返回值){
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(&regex,"[^a-fA-F_][0-9]+",0);
然后您接受默认的正则表达式语法,这就是所谓的。关于BRE,唯一明智的说法是“不要使用它们”。始终指定
REG\u EXTENDED
标志(至少),然后您将使用一个正则表达式语法,该语法至少与您期望的语法有一点相似之处。(否则,字符串将由技术上称为“倾斜木材”的字符控制:
\
字符在正则表达式中启用元字符,以及更多的
\
字符,以便所需的
\
字符在字符串中不被视为转义字符。)


请查看和以了解更多详细信息。请确保仔细阅读第二个链接(尽管您可以忽略基本正则表达式语法:-),因为在更现代的正则表达式库中有许多常用的语法,这些语法在Posix正则表达式中不存在,甚至在扩展正则表达式中也不存在。(其中包括第二个正则表达式中使用的
\d
。Posix已命名字符类,例如
[[:digit:]

如果在
regcomp
中指定标志为0:

return_value = regcomp(&regex,"[^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](无单词)。您可以检查字符串是否仅由字符组成,而无需使用正则表达式库。您可以检查字符串是否仅由字符组成,而无需使用正则表达式库。