如何用正则表达式检测无效的C转义字符串?

0 投票
2 回答
636 浏览
提问于 2025-04-15 16:49

我想找一个正则表达式(regex),用来检测在C语言中双引号转义字符串里是否有一些无效的转义字符(在这种字符串中,只有双引号是可以被转义的)。

我认为有效的转义字符有 \\\n\r\"(测试字符串中使用的是双引号)。

一个部分解决方案是使用 (?<!\\)\\[^\"\\nr],但是这个方法无法检测到像 \\\ 这样的错误转义。

这里有一个我用来测试匹配的字符串:

...\n...\\b...\"...\\\\...\\\E...\...\\\...\\\\\..."...\E...

这个表达式应该把最后6个部分标记为无效,而前4个是有效的。问题是我现在的版本只找到了2/5个错误。

2 个回答

0

试试这个正则表达式:

^(?:[^\\]+|\\[\\rn"])*(\\(?:[^\\rn"]|$))

如果你找到了匹配的结果,那说明你有一个无效的转义序列。

3
(?:^|[^\\])(?:\\\\)*((?:\"|\\(?:[^\"\\nr]|$)))

这段话的意思是,字符串的开始部分,或者说是一些不是反斜杠的东西。接下来可能会有零个或多个正确使用的反斜杠,然后是一个没有被转义的 ",或者又是一个反斜杠;如果是另一个反斜杠的话,后面必须跟着一些不是 "\nr 的东西,或者是字符串的结束。

错误的转义方式也会被记录下来。

撰写回答