【发布时间】:2009-12-09 12:41:16
【问题描述】:
我想找到一个正则表达式 (regex),它可以检测 C 双引号转义字符串中是否有一些无效转义(您可以在其中找到仅转义的双引号)。
我认为有效的\\ \n \r \" (测试字符串使用“)
对此的部分解决方案是使用(?<!\\)\\[^\"\\nr],但这个无法检测到像\\\ 这样的错误转义。
这是我用来测试匹配的测试字符串:
...\n...\\b...\"...\\\\...\\\E...\...\\\...\\\\\..."...\E...
表达式应匹配最后 6 个无效块,前 4 个有效。问题是我当前的版本确实只发现了 2/5 错误。
【问题讨论】:
-
\\\E 无效——第一个斜杠转义第二个,第三个正试图转义 E…
-
所以你想测试一个双引号字符串是否包含无效的转义序列?
-
不要忘记 C 编译器实际上允许:
\t\b\v\f\a\?\'用于简单字符;它们还允许\o\oo\ooo用于八进制转义,\xX\xXX用于十六进制(实际上,名义上多于两个十六进制数字)。 C99 也允许\uXXXX和\U00XXXXXX用于十六进制编码的 Unicode 字符。