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

Python 如何使用正则表达式检测无效的C转义字符串?,python,c,regex,escaping,Python,C,Regex,Escaping,我想找到一个正则表达式(regex),它可以检测C双引号转义字符串中是否有一些无效的转义(在这里只能找到双引号转义) \\/COD> \n>代码>代码> \r>代码>代码> \“代码>(测试字符串使用)) 部分解决方法是使用(?但是这个方法无法检测到像\\\这样的错误转义 下面是我用来测试匹配的测试字符串: …\n..\\b..\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\

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

<有效> <代码> \\/COD> <代码> \n>代码>代码> \r>代码>代码> \“代码>(测试字符串使用))

部分解决方法是使用
(?但是这个方法无法检测到像
\\\
这样的错误转义

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

…\n..\\b..\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\


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

请尝试此正则表达式:

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

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

请尝试以下正则表达式:

^(?:[^\\]+|\\[\\rn"])*(\\(?:[^\\rn"]|$))
(?:^|[^\\])(?:\\\\)*((?:\"|\\(?:[^\"\\nr]|$)))
如果有匹配项,则转义序列无效

(?:^|[^\\])(?:\\\\)*((?:\"|\\(?:[^\"\\nr]|$)))
这是字符串或非反斜杠的开头。然后是一些(可能为零)正确转义的反斜杠,然后是未转义的
或另一个反斜杠;如果是另一个反斜杠,则必须后跟既不是
的反斜杠。”
\
n
,或
r
,或字符串的结尾

错误的越狱也会被抓获

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


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

\\\E无效第一个斜杠转义第二个斜杠,第三个斜杠试图转义E…因此您想测试双引号字符串是否包含无效的转义序列?不要忘记C编译器实际上允许:
\t\b\v\f\a\?\\\\
用于简单字符;它们还允许w
\o\oo\ooo
表示八进制转义,而
\xX\xXX
表示十六进制(实际上名义上超过两个十六进制数字).C99也允许对十六进制编码的Unicode字符使用
\uxxx
\U00XXXXXX
。\\\E无效。第一个斜杠转义第二个斜杠,第三个斜杠试图转义E。因此,您想测试双引号字符串是否包含无效的转义序列?别忘了C编译器实际上允许:
\t\b\v\f\a\?'
用于简单字符;它们还允许
\o\oo\ooo
用于八进制转义,允许
\xX\xXX
用于十六进制(实际上名义上超过两个十六进制数字)。C99也允许
\uxxx
\U00XXXXXX
用于十六进制编码的Unicode字符。这与
不匹配“
,这是Sorin声明的一个想法无效。这与
,这是Sorin声明的一个想法无效。谢谢,Python字符串将是
r”(?:^.[^\\])(?:\\\)*(?:“\\\(?:[^\\\\\\\\\\\\\)”
(在第一个双引号前再加一个)我的编辑器不要求我转义双引号;显然,当我转义它们时,我错过了那个双引号。D'oh.更正。谢谢,Python字符串将是
r”(?:^.[^\\])(?:\\\\)*((?:“\\\(?:[^\\\\\\\\\\\$)”
(在第一个双引号之前再加一个)我的编辑不要求我避开双引号;显然,当我避开它们时,我错过了那个双引号。