C++ 查找C+中出现的非ASCII字符+;带有非ASCII注释的代码

C++ 查找C+中出现的非ASCII字符+;带有非ASCII注释的代码,c++,regex,C++,Regex,我有注释和字符串中带有西里尔字符的源代码。MSVC允许在标识符中使用西里尔字符。如何找到忽略所有注释和字符串的所有西里尔字符?我想在不使用gcc或脚本的情况下完成这项工作,完全使用简单的正则表达式搜索。找到注释/*.*?*/并不困难,但是如何找到注释中不存在的内容以及ASCII字符集中不存在的内容呢?让我们假设所有注释的行为都像“//”——即使是“/*comment*/”——从某种意义上讲,一旦注释开始,在同一行上的注释后面就不会有更多的代码。尝试将源文件管道化到以下位置: perl -lne

我有注释和字符串中带有西里尔字符的源代码。MSVC允许在标识符中使用西里尔字符。如何找到忽略所有注释和字符串的所有西里尔字符?我想在不使用gcc或脚本的情况下完成这项工作,完全使用简单的正则表达式搜索。找到注释/*.*?*/并不困难,但是如何找到注释中不存在的内容以及ASCII字符集中不存在的内容呢?

让我们假设所有注释的行为都像“//”——即使是“/*comment*/”——从某种意义上讲,一旦注释开始,在同一行上的注释后面就不会有更多的代码。尝试将源文件管道化到以下位置:

perl -lne 'print $1 if m{^([^/]+)(?:/[/*])?}'
这会让你得到除了评论以外的一切


剩下的问题是字符集的函数。如果是Windows-1251,您可以查找如下模式:
'[^\x00-\x7f]+'

它是否必须使用正则表达式?Um<代码>//这是C++中的注释,
“this\”是字符串\\“
(与正则表达式一样))在字符串中的注释分隔符、注释中的字符串、
#如果0
、有向图、三角图等之间,从正则表达式中获得有意义的结果将很困难,除非您的代码库非常有限,或者您愿意忍受许多不正确的结果。瞧,@SteveJessop是对的,但实际上比他暗示的还要糟糕。也就是说,识别非ASCII字符应该很容易,至少在某些正则表达式引擎中是如此,()这和问题的答案相反,检测评论和字符串是困难的部分。史提夫,是的:多一点。谷歌正则表达式捕获C++字符串并不难。但是我需要从搜索中过滤掉它,我不知道怎么做。如果我有正则表达式A和正则表达式B,那么如何编写一个表格的正则表达式。A但不是B的一部分。问题是不通过一个正则表达式传递源代码,剪切注释,然后将其与其他正则表达式匹配。问题是在一个正则表达式中同时剪切和匹配。例如,在MSVC中搜索正则表达式时,这很有用。