Flex Regex打印“;()";对于输出

Flex Regex打印“;()";对于输出,regex,flex-lexer,lex,Regex,Flex Lexer,Lex,我正在编写flex,当我以输入00:50的形式编写时,我遇到了一个问题,我希望将其作为输出:1 tTIME(00:50),但我的代码有以下输出:1 tTIME 00:50) 我的电话在这里。我的问题在哪里?提前谢谢 ^([0-1]?[0-9]|[2][0-3])[:]([0-5][0-9])$ { yytext[yyleng-yyleng-1]='(';yytext[yyleng]=')'; printf("%d tTIME %s \n ", linecounter,yytex

我正在编写flex,当我以输入00:50的形式编写时,我遇到了一个问题,我希望将其作为输出:1 tTIME(00:50),但我的代码有以下输出:1 tTIME 00:50)

我的电话在这里。我的问题在哪里?提前谢谢

 ^([0-1]?[0-9]|[2][0-3])[:]([0-5][0-9])$ {
    yytext[yyleng-yyleng-1]='(';yytext[yyleng]=')';
    printf("%d tTIME %s \n ", linecounter,yytext);
}

冒着显而易见的风险,如果要打印带括号的字符串,则应打印带括号的字符串:

printf("%d tTIME (%s) \n ", linecounter, yytext);
这样做不需要修改字符串

yytext
指向的字符不属于您。如果出于某种原因需要字符串的副本,则需要自己创建一个副本,并且可以在执行此操作时自由添加更多字符。例如:

char* pstring = malloc(yyleng + 3); /* Room for the parentheses and NUL */
sprintf(pstring, "(%s)", yytext);
对于稍微复杂一点的内容,您可能希望使用
snprintf
,或者如果您有了它,最好使用
asprintf


这个问题与
flex
关系不大。Flex是一个非常有用的工具,但它不能代替理解如何使用C进行字符串操作。

你不应该乱搞
yytext,
,而
yytext[yyleng-yyleng-1]
的预期含义让我完全无法理解。我当时正试图做yytext[-1]这是我试图做的最后一次尝试,我曾经制作yytext[0],但它不起作用。你对这个问题有什么建议吗?它可以覆盖时间(00:50)。