2017-10-22 240 views
0

我正在写一个C程序,它使用正则表达式来确定正在从文件读取的文本中的某些单词是有效还是无效的。我附上了执行我的正则表达式检查的代码。我使用了一个在线正则表达式检查器,并基于它说我的正则表达式是正确的。我不确定为什么它会是错的。
正则表达式应接受AB1234或ABC1234 ABCD1234格式的字符串。正则表达式没有返回正确的解决方案

//compile the regular expression 
reti1 = regcomp(&regex1, "[A-Z]{2,4}\\d{4}", 0); 
// does the actual regex test 
status = regexec(&regex1,inputString,(size_t)0,NULL,0); 

if (status==0) 
    printf("Matched (0 => Yes): %d\n\n",status); 
else 
    printf(">>>NO MATCH<< \n\n"); 
+1

究竟是“错误”呢?请提供可以产生意想不到结果的示例输入 – aschepler

+1

此外,你可以做一个[简短但完整的程序](https://stackoverflow.com/help/mcve),说明问题?你应该在代码中包含至少一个给出意外结果的示例输入,就像@aschepler提到的那样,但除此之外,它不需要比你已经拥有'main()'函数的代码多得多。 –

+1

看起来像使用POSIX正则表达式实现(regex.h),但传递不支持的PCRE样式正则表达式。 –

回答

1

您正在使用POSIX regular expressions,从regex.h。这些不支持您正在使用的语法,格式为PCRE,而且这些日子更为常见。你最好试图使用一个能够给你PCRE支持的库。如果你必须使用POSIX表情,我想这会工作:

#include <regex.h> 
#include "stdio.h" 
int main(void) { 
    int status; 
    int reti1; 
    regex_t regex1; 
    char * inputString = "ABCD1234"; 

    //compile the regular expression 
    reti1 = regcomp(&regex1, "^[[:upper:]]{2,4}[[:digit:]]{4}$", REG_EXTENDED); 
    // does the actual regex test 
    status = regexec(&regex1,inputString,(size_t)0,NULL,0); 

    if (status==0) 
     printf("Matched (0 => Yes): %d\n\n",status); 
    else 
     printf(">>>NO MATCH<< \n\n"); 

    regfree (&regex1); 
    return 0; 
} 

(请注意,我的C是非常生疏,所以这段代码可能是可怕的。)

我发现this回答一些好的资源。

相关问题