正则表达式匹配字符串

时间:2014-01-09 16:02:45

标签: c regex flex-lexer

我正在实现一个编译器,我想做的一件事就是使用' +'进行字符串连接,例如:

str_cnct = "hi" + "dear"

所以现在的价值是" hidear"。

问题是我的flex中的正则表达式将所有这些直接捕获为一个字符串,给出了#34; hi + dear"。 我目前的正则表达式是:\".*\"

{string}                {
                            yylval.struct_val.val.chain = (char *)malloc(sizeof(char)*yyleng);
                            strncpy(yylval.struct_val.val.chain,yytext,yyleng);
                            remove_char(yylval.struct_val.val.chain);
                            yylval.struct_val.length = yyleng;
                            yylval.struct_val.line = yylineno;
                            yylval.struct_val.column = columnno + yyleng + 2;
                            printf("--- String: %s\n", yylval.struct_val.val.chain);
                            return(STRING);
                    }

如何避免这种情况并捕获" hi"然后' +'作为运营商然后"亲爱的"?

提前致谢

2 个答案:

答案 0 :(得分:0)

尝试以下内容:

^\"([^\"]*)\"\s*\+\s*\"([^\"]*)\"$

$ 1将捕获" hi"没有报价和2美元将捕获"亲爱的"没有字符串的引号"" hi" +"亲爱的"'。

答案 1 :(得分:0)

我终于经历了这样的事情:

%x MATCH_STR
quotes \"
%%

{quotes}                { BEGIN(MATCH_STR); }

<MATCH_STR>[\n]         { yyerror("String not closed"); }

<MATCH_STR>[^"^\n]*     {
                        yylval.struct_val.val.chain = (char *)malloc(sizeof(char)*yyleng);
                        strncpy(yylval.struct_val.val.chain,yytext,yyleng);
                        remove_char(yylval.struct_val.val.chain);
                        yylval.struct_val.length = yyleng;
                        yylval.struct_val.line = yylineno;
                        yylval.struct_val.column = columnno + yyleng + 2;
                        printf("--- String: %s\n", yylval.struct_val.val.chain);
                        return(STRING);
                        }

<MATCH_STR>{quotes}     { BEGIN(INITIAL); }