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 ++字符串文字如何安全可靠?