如何使用Regex验证从键盘输入的数据是否为C语言的实数?

问题描述 投票:0回答:1

我尝试在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(&regex,"[^a-fA-F_][0-9]+",0);
  return_value = regexec(&regex, "4324", 0, NULL, 0);
  return_value2 = regcomp(&regex,"\d+",0);
  return_value = regexec(&regex, "4324", 0, NULL, 0);
  print_result(return_value);  //not found
  print_result(return_value); //no found
  print_result(return_value2);
  return 0;
}

您能给我一些想法来验证输入吗?我想找到另一种不使用ASCII值的方法

c regex
1个回答
3
投票

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

return_value = regcomp(&regex,"[^a-fA-F_][0-9]+",0);

然后您接受默认的正则表达式语法,即所谓的Basic Regular Expression (BRE)。关于BRE的唯一明智的说法是“不要使用它们”。始终(至少)指定REG_EXTENDED标志,然后您将使用正则表达式语法,该语法至少与您期望的传递相似。 (否则,您的字符串将被技术上称为“倾斜木材”的支配​​:\字符,这些字符可在正则表达式中启用元字符,以及更多的\字符,以便您所需的\字符在字符串。)

查看man regexecman 7 regex了解更多详细信息。确保您通读了第二个链接(尽管您可以忽略基本的正则表达式语法:-),因为在更现代的正则表达式库中有很多常用语法,而Posix正则表达式中甚至没有扩展语法。 (其中包括在第二个正则表达式中使用的\d。Posix具有命名的字符类,例如[[:digit:]]。)

© www.soinside.com 2019 - 2024. All rights reserved.