Lex-字符串内的双引号

问题描述 投票:4回答:2

我有lex语法,其中包含双引号字符串的规则:

...
%x DOUBLEQUOTE
...
%%
"\""                { yylval->string = NULL; BEGIN(DOUBLEQUOTE); }
<DOUBLEQUOTE> {
    "\n"            {
                        /* reset column counter on new line */
                        PARSER->linepos = 0;
                        (PARSER->linenum)++;
                        expr_parser_append_string(PARSER, &(yylval->string), yytext);
                    }
    [^\"\n]+        { expr_parser_append_string(PARSER, &(yylval->string), yytext); }
    "\\\""          { expr_parser_append_string(PARSER, &(yylval->string), yytext); }
    "\""            {
                        BEGIN(INITIAL);
                        if ( yylval->string != NULL )
                            string_unescape_c(yylval->string);
                        return ( TOKEN_STRING );
                    }
}

以某种方式,转义序列\“仅在字符串的开头匹配。如果\”出现在字符串的后面,则看起来像字符\分别匹配。

例如:

  1. Passes:"\" "

  2. 失败:" \" "

  3. 失败:"This is string example: \"a string inside of string\""

为什么在字符串中出现转义序列\“时,规则"\\\""不匹配它?

regex string lex
2个回答
0
投票

如果反斜杠不是加引号的字符串中的第一个字符,则反斜杠将在某些标记的末尾匹配。例如:


0
投票
[^\"\n]+        { expr_parser_append_string(PARSER, &(yylval->string), yytext); }
© www.soinside.com 2019 - 2024. All rights reserved.