如何用正则表达式检测无效的C转义字符串?
我想找一个正则表达式(regex),用来检测在C语言中双引号转义字符串里是否有一些无效的转义字符(在这种字符串中,只有双引号是可以被转义的)。
我认为有效的转义字符有 \\
、\n
、\r
和 \"
(测试字符串中使用的是双引号)。
一个部分解决方案是使用 (?<!\\)\\[^\"\\nr]
,但是这个方法无法检测到像 \\\
这样的错误转义。
这里有一个我用来测试匹配的字符串:
...\n...\\b...\"...\\\\...\\\E...\...\\\...\\\\\..."...\E...
这个表达式应该把最后6个部分标记为无效,而前4个是有效的。问题是我现在的版本只找到了2/5个错误。
2 个回答
0
试试这个正则表达式:
^(?:[^\\]+|\\[\\rn"])*(\\(?:[^\\rn"]|$))
如果你找到了匹配的结果,那说明你有一个无效的转义序列。
3
(?:^|[^\\])(?:\\\\)*((?:\"|\\(?:[^\"\\nr]|$)))
这段话的意思是,字符串的开始部分,或者说是一些不是反斜杠的东西。接下来可能会有零个或多个正确使用的反斜杠,然后是一个没有被转义的 "
,或者又是一个反斜杠;如果是另一个反斜杠的话,后面必须跟着一些不是 "
、\
、n
或 r
的东西,或者是字符串的结束。
错误的转义方式也会被记录下来。