Lex/Flex:C/C++中字符串文字的正则表达式?

son*_*s21 7 c c++ regex lex flex-lexer

我在这里看ANSI C语法.

此页面包含许多用于ANSI C的Lex/Flex中的正则表达式.

在理解字符串文字的正则表达式时遇到问题.

他们提到正则表达为 \"(\\.|[^\\"])*\"

据我所知,\"这用于双引号,\\用于转义字符,.用于任何字符,除了escape character*为零或多次.

[^\\"]暗示字符除外\,".

因此,在我看来,正则表达应该是\"(\\.)*\".

你能给出一些正则表达式失败的字符串吗?

要么

他们为什么用过[^\\"]

cyo*_*yon 5

\"(\\.)*\"您建议的正则表达式匹配由\符号和任意字符交替组成的字符串,例如:

"\z\x\p\r"
Run Code Online (Sandbox Code Playgroud)

因此,此正则表达式将无法匹配以下字符串:

"hello"
Run Code Online (Sandbox Code Playgroud)

该字符串"hello"将由正则表达式匹配,\".*\"但也会与该字符串匹配,""""或者"\"两者均无效。

要摆脱这些无效匹配,我们可以使用\"[^\\"]*\",但是现在将无法匹配"\a\a\a"有效字符串之类的字符串。

如我们所见,\"(\\.)*\"确实匹配了该字符串,所以我们要做的就是将这两个结合起来\"(\\.|[^\\"])*\"