如何使用正则表达式检测无效的C转义字符串?
我想找到一个正则表达式(正则表达式),它检测你是否在C双引号转义字符串中有一些无效的转义符(在这里你可以找到只引用的双引号)。
我认为有效\\
\n
\r
\"
(测试字符串正在使用”)
对此的部分解决方案是使用(?<!\\)\\[^\"\\nr]
但是这个无法检测到错误的转义,例如\\\
。
这是我用来测试匹配的测试字符串:
...\n...\\b...\"...\\\\...\\\E...\...\\\...\\\\\..."...\E...
表达式应该与最后6个块匹配为无效,前4个有效。 问题是我当前版本确实只发现2/5错误。
(?:^|[^\\])(?:\\\\)*((?:\"|\\(?:[^\"\\nr]|$)))
这是一个字符串的开头,或者不是反斜杠的东西。 然后一些(可能为零)正确转义反斜杠,然后是未转义的"
或另一个反斜杠;如果它是另一个反斜杠,则必须后跟一些既不是"
, \
, n
,也不是r
,或者字符串的结尾。
您也会捕获不正确的转义。
试试这个正则表达式:
^(?:[^\\]+|\\[\\rn"])*(\\(?:[^\\rn"]|$))
如果匹配,则转义序列无效。