Python 如何使用正则表达式检测无效的C转义字符串?
我想找到一个正则表达式(regex),它可以检测C双引号转义字符串中是否有一些无效的转义(在这里只能找到双引号转义) <有效> <代码> \\/COD> <代码> \n>代码>代码> \r>代码>代码> \“代码>(测试字符串使用)) 部分解决方法是使用Python 如何使用正则表达式检测无效的C转义字符串?,python,c,regex,escaping,Python,C,Regex,Escaping,我想找到一个正则表达式(regex),它可以检测C双引号转义字符串中是否有一些无效的转义(在这里只能找到双引号转义) \\/COD> \n>代码>代码> \r>代码>代码> \“代码>(测试字符串使用)) 部分解决方法是使用(?但是这个方法无法检测到像\\\这样的错误转义 下面是我用来测试匹配的测试字符串: …\n..\\b..\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
(?但是这个方法无法检测到像\\\
这样的错误转义
下面是我用来测试匹配的测试字符串:
…\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”(?:^.[^\\])(?:\\\\)*((?:“\\\(?:[^\\\\\\\\\\\$)”
(在第一个双引号之前再加一个)我的编辑不要求我避开双引号;显然,当我避开它们时,我错过了那个双引号。