Regular expression for a string literal in flex/lex

c, flex-lexer, lex, regex, string-literals

Solution

A string consists of a quote mark

"

followed by zero or more of either an escaped anything

\\.

or a non-quote character, non-backslash 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.

Problem

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!

Original source