C++ Regex忽略注释行C++;

C++ Regex忽略注释行C++;,c++,regex,C++,Regex,我试图使用正则表达式来查找代码中的所有变量初始化或赋值。 目前我有 (\w+|\w[_])\s*=\s*(\d+\.\d+|.*) 这是可行的,但也可以找到注释过的代码,如 //a=100我不希望它这样做。我试过了 ([^/]\w+|\w[_])\s*=\s*(\d+\.\d+|.*)` 我认为应该忽略以/开头的字符串,但这不起作用 编辑: 例如,我希望它能找到像 b=200 但不是//c=3如果有必要,我会试试这个 ^(?:(?!\/\/).)*[a-z][a-z0-9\_]*\s*=\s

我试图使用正则表达式来查找代码中的所有变量初始化或赋值。 目前我有

(\w+|\w[_])\s*=\s*(\d+\.\d+|.*)
这是可行的,但也可以找到注释过的代码,如
//a=100我不希望它这样做。我试过了

([^/]\w+|\w[_])\s*=\s*(\d+\.\d+|.*)`
我认为应该忽略以/开头的字符串,但这不起作用

编辑:

例如,我希望它能找到像
b=200

但不是
//c=3

如果有必要,我会试试这个

^(?:(?!\/\/).)*[a-z][a-z0-9\_]*\s*=\s*[0-9]+;

请参见演示:

使用此正则表达式并检查第一个子匹配是否为
“/”
,如果是,则在注释之后

(//)*\s*(\w+|\w[_])\s*=\s*(\d+\.\d+|.*)

< > >代码> > var=5;“”将得到三个子匹配:空白、<代码> var >代码>和<代码> 5 /<代码> <<代码> > /> var > 5 > <代码> > //<代码> <强> > <代码> var >代码>,<代码> 5 < /COD> .< /P>初学者, >是C++中的注释领导者(或C代码注释>代码> /*<代码>)不是“\\`如果你不想匹配字符串常量中的代码和嵌入注释块中的代码,情况会变得更糟,比如:`/*a=100*/不确定正则表达式是否能完全满足你的需要。@PaulRoub这让人尴尬,现在已修复。如果您有选择,我建议您使用
libclang
正确解析源文件并从AST中提取信息。ReEX太弱了,无法使所有的边缘情况正确。@ RedX是对的:试图让正则表达式单独解析(甚至Lax)C++是一个徒劳的练习。修复后,它不会阻止包含搜索文本的注释行的匹配。OP希望在匹配条件中排除这些行。