Flex Regex打印“;()";对于输出
我正在编写flex,当我以输入00:50的形式编写时,我遇到了一个问题,我希望将其作为输出:1 tTIME(00:50),但我的代码有以下输出:1 tTIME 00:50) 我的电话在这里。我的问题在哪里?提前谢谢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
^([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)。