我正在寻找为 C 中的某些字符串制作正则表达式。
这是我到目前为止:
C 中的字符串由双引号 (") 分隔,因此正则表达式必须用 \" \" 括起来。
该字符串可能不包含换行符,所以我需要做 [^\n] (我认为)。
当且仅当它们被转义时,字符串也可能包含双引号或反斜杠字符。因此 [\\ \"] (我再次认为)。
除此之外,其他任何事情都会发生。
非常感谢任何帮助我对如何开始编写这个正则表达式有点迷茫。
一个简单的 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的优秀书籍。