Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/71.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/20.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 如何使用正则表达式匹配包含空格、null和换行符的日期时间字符串?_C_Regex - Fatal编程技术网

C 如何使用正则表达式匹配包含空格、null和换行符的日期时间字符串?

C 如何使用正则表达式匹配包含空格、null和换行符的日期时间字符串?,c,regex,C,Regex,我正在使用fgets遍历一个文件,并尝试查看一行是否符合某些条件 基本上,我的循环是 #define BUFSIZE = 4096; FILE *txt_file = fopen("some_file.txt", "r"); char buffer[BUFSIZE] = {'\0'}; int i; while (fgets(buffer, BUFSIZE, txt_file)){ //some logic // Reset buffer string for (i=

我正在使用
fgets
遍历一个文件,并尝试查看一行是否符合某些条件

基本上,我的循环是

#define BUFSIZE = 4096;

FILE *txt_file = fopen("some_file.txt", "r");
char buffer[BUFSIZE] = {'\0'};
int i;
while (fgets(buffer, BUFSIZE, txt_file)){
    //some logic

    // Reset buffer string
    for (i=0; i<BUFSIZE; i++)
        buffer[i] = '\0';
}
(hh:mm:ss部分无关紧要)如果我把它转换成C可以解释的格式

char *regex_str = ".*\\d{4}\\-(0?[1-9]|1[012])\\-(0?[1-9]|[12][0-9]|3[01]).*"
问题是,当我试图找到匹配项时,我总是得到
不匹配项。基本上在我的
while
循环中,我正在尝试:

int reti = regcomp(&regex, regex_str, REG_EXTENDED);
if (reti)
    fprintf(stderr, "could not compile regex\n");

reti = regexec(&regex, buffer, 0, NULL, 0);
if (!reti){
    char msgbuf[100];
    regerror(reti, &regex, msgbuf, sizeof(msgbuf));
    fprintf(stderr, "Regex match failed: %s\n", msgbuf);
}

正则表达式为我编译,但它什么也找不到。我知道有空字符和换行字符。我尝试添加
x00+
以检查空字符,并添加
(\r\n\r\124n)
以检查新行,但没有成功。我的正则表达式有什么问题?我用过,我的正则表达式在那里工作,但不是在C中。

尝试交换月份和日期

".*\\d{4}-(0?[1-9]|[12][0-9]|3[01])-(0?[1-9]|1[012]).*"
===============

 .* 
 \d{4} 
 -
 (                             # (1 start), Day
      0? [1-9] 
   |  
      [12] [0-9] 
   |  
      3 [01] 
 )                             # (1 end)
 -
 (                             # (2 start), Month
      0? [1-9] 
   |  
      1 [012] 
 )                             # (2 end)
 .* 
包含空格的日期时间字符串,null

根据定义,C字符串不能包含空字符,除非终止的
'\0'

只是找不到任何东西

似乎您误解了
regexec()
的返回值-如果(!reti)
,您将打印一条错误消息
,但是
regexec()
如果匹配成功,则返回零

 .* 
 \d{4} 
 -
 (                             # (1 start), Day
      0? [1-9] 
   |  
      [12] [0-9] 
   |  
      3 [01] 
 )                             # (1 end)
 -
 (                             # (2 start), Month
      0? [1-9] 
   |  
      1 [012] 
 )                             # (2 end)
 .*