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(®ex, regex_str, REG_EXTENDED);
if (reti)
fprintf(stderr, "could not compile regex\n");
reti = regexec(®ex, buffer, 0, NULL, 0);
if (!reti){
char msgbuf[100];
regerror(reti, ®ex, 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)
.*