【发布时间】:2011-01-03 15:09:22
【问题描述】:
我正在尝试学习 flex 并希望匹配字符串文字。我的代码目前看起来像:
"\""([^\n\"\\]*(\\[.\n])*)*"\"" {/*matches string-literal*/;}
我已经在变化中苦苦挣扎了一个小时左右,但无法让它按应有的方式工作。我本质上希望匹配一个不能包含换行符(除非它被转义)并支持转义字符的字符串文字。
我可能只是写了一个糟糕的正则表达式或者一个与 flex 不兼容的表达式。请指教!
【问题讨论】:
-
非常感谢大家!您所有的 cmets 都非常有帮助。最终对我有用的正则表达式是 codadict 链接的 C 规范中使用的正则表达式的变体(由 Jonathan 解释): \"(\(.|\n)|[^\\"\n])* \"
-
既然您发现乔纳森的回答很有帮助,请考虑为他的回答添加一个赞成票。
-
顺便说一句:在您的问题中,您没有指定您感兴趣的语言的字符串文字。将您要询问的语言放在问题的标签中是一个非常好的主意。
标签: c regex lex string-literals flex-lexer