Regular expression for a string literal in flex/lex

I'm experimenting to learn flex and would like to match string literals. My code currently looks like:

"""([^n"]*([.n])*)*"""        {/*matches string-literal*/;}

I've been struggling with variations for an hour or so and can't get it working the way it should. I'm essentially hoping to match a string literal that can't contain a new-line (unless it's escaped) and supports escaped characters.

I am probably just writing a poor regular expression or one incompatible with flex. Please advise!


You'll find these links helpful

  • ANSI C grammar, Lex specification

  • ANSI C Yacc grammar


  • A string consists of a quote mark

    "
    

    followed by zero or more of either an escaped anything

    .
    

    or a non-quote character

    [^"]
    

    and finally a terminating quote

    "
    

    Put it all together, and you've got

    "(.|[^"])*"
    

    The delimiting quotes are escaped because they are Flex meta-characters.


    对于单行...你可以使用这个:

    "([^"]|.)*"  {/*matches string-literal on a single line*/;}
    
    链接地址: http://www.djcxy.com/p/72122.html

    上一篇: C ++字符串文字如何安全可靠?

    下一篇: 在flex / lex中的字符串文字的正则表达式