Удаление комментариев в стиле C / C ++ с использованием boost :: regex - PullRequest
0 голосов
/ 26 февраля 2012

Я пытаюсь удалить комментарии в стиле 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, "");

Таким образом, более короткое регулярное выражение действительно работает, а более длинное - нет.

Ответы [ 2 ]

3 голосов
/ 26 февраля 2012

Кажется немного странным, что вы бы использовали для этого регулярное выражение, когда boost уже имеет библиотеку препроцессора C ++ ( Boost.Wave ), которую можно использовать для удаления комментариев.

0 голосов
/ 26 февраля 2012

если

\*

становится

\\* 

тогда почему не

[^\\] 

1010 * стать *

[^\\\\] 
...