Flex Regex打印输出“()”

时间:2016-02-22 08:22:31

标签: 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,yytext);
}

1 个答案:

答案 0 :(得分:1)

冒着明显的风险,如果你想打印一个带有圆括号的字符串,你应该打印一个带有圆括号的字符串:

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,则会更好。

< views>这个问题与flex几乎没有关系。 Flex是一个非常有用的工具,但它不能替代理解如何使用C来进行字符串操作。< / opinion>