Я пытаюсь удалить комментарии в стиле 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, "");
Таким образом, более короткое регулярное выражение действительно работает, а более длинное - нет.