我正在尝试使用正则表达式从字符串中删除 C 和 C++ 样式的注释。我为 Perl 找到了一个似乎两者兼而有之的方法:
s#/\*[^*]*\*+([^/*][^*]*\*+)*/|//([^\\]|[^\n][\n]?)*?\n|("(\\.|[^"\\])*"|'(\\.|[^'\\])*'|.[^/"'\\]*)#defined $3 ? $3 : ""#gse;
但我不确定如何将它与boost::regex
代码块一起使用,或者我需要做什么才能将其转换为boost::regex
.
仅供参考:我在这里找到了正则表达式:perlfaq6,它似乎涵盖了我需要的任何情况。
我不希望使用boost::spirit::qi
它来执行此操作,因为它会为项目的编译增加大量时间。
编辑:
std::string input = "hello /* world */ world";
boost::regex reg("(/\\*([^*]|(\\*+[^*/]))*\\*+/)|(//.*)");
input = boost::regex_replace(input, reg, "");
因此,较短的正则表达式确实有效,但较长的则无效。