son*_*s21 7 c c++ regex lex flex-lexer
我在这里看ANSI C语法.
此页面包含许多用于ANSI C的Lex/Flex中的正则表达式.
在理解字符串文字的正则表达式时遇到问题.
他们提到正则表达为 \"(\\.|[^\\"])*\"
据我所知,\"这用于双引号,\\用于转义字符,.用于任何字符,除了escape character和*为零或多次.
[^\\"]暗示字符除外\,".
因此,在我看来,正则表达应该是\"(\\.)*\".
你能给出一些正则表达式失败的字符串吗?
要么
他们为什么用过[^\\"]?
\"(\\.)*\"您建议的正则表达式匹配由\符号和任意字符交替组成的字符串,例如:
"\z\x\p\r"
Run Code Online (Sandbox Code Playgroud)
因此,此正则表达式将无法匹配以下字符串:
"hello"
Run Code Online (Sandbox Code Playgroud)
该字符串"hello"将由正则表达式匹配,\".*\"但也会与该字符串匹配,""""或者"\"两者均无效。
要摆脱这些无效匹配,我们可以使用\"[^\\"]*\",但是现在将无法匹配"\a\a\a"有效字符串之类的字符串。
如我们所见,\"(\\.)*\"确实匹配了该字符串,所以我们要做的就是将这两个结合起来\"(\\.|[^\\"])*\"。