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

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

我认为有效\\ \n \r \" (测试字符串正在使用”)

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

这是我用来测试匹配的测试字符串:

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

表达式应该与最后6个块匹配为无效,前4个有效。 问题是我当前版本确实只发现2/5错误。

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

这是一个字符串的开头,或者不是反斜杠的东西。 然后一些(可能为零)正确转义反斜杠,然后是未转义的"或另一个反斜杠;如果它是另一个反斜杠,则必须后跟一些既不是"\n ,也不是r ,或者字符串的结尾。

您也会捕获不正确的转义。

试试这个正则表达式:

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

如果匹配,则转义序列无效。