C 中字符串的正则表达式

0 regex flex-lexer

我正在寻找为 C 中的某些字符串制作正则表达式。

这是我到目前为止:

C 中的字符串由双引号 (") 分隔,因此正则表达式必须用 \" \" 括起来。

该字符串可能不包含换行符,所以我需要做 [^\n] (我认为)。

当且仅当它们被转义时,字符串也可能包含双引号或反斜杠字符。因此 [\\ \"] (我再次认为)。

除此之外,其他任何事情都会发生。

非常感谢任何帮助我对如何开始编写这个正则表达式有点迷茫。

ric*_*ici 5

一个简单的 flex 模式来识别字符串文字(包括带有嵌入行延续的文字):

["]([^"\\\n]|\\.|\\\n)*["]
Run Code Online (Sandbox Code Playgroud)

这将允许

   "string with \
line continuation"
Run Code Online (Sandbox Code Playgroud)

但不是

"C doesn't support
 multiline strings"
Run Code Online (Sandbox Code Playgroud)

如果您不想处理行延续,请删除\\\n替代项。如果您需要三合字母支持,它会变得更加烦人。

尽管它可以识别字符串,但它并没有试图理解它们。通常,C 词法分析器会希望处理带有反斜杠序列的字符串,以便将"\"\n"其转换为两个字符"NL( 0x22 0x0A)。在某些时候,您可能想看看优化 flex 字符串文字解析(尽管如果您使用 C 进行编程,则需要对其进行调整)。

Flex 模式记录在flex 手册中。阅读有关正则表达式的很好的参考资料也可能值得,例如 John Levine 关于Flex 和 Bison的优秀书籍。