私はcppソースファイルをロードしたvar std::string sourceCode;
があると仮定します。今では、tr1から含まれているregexクラスのコメントをすべて削除したいと思います(今はMicrosoftコンパイラを使用しているので完全に含まれています)。スペースを使ってコメントを置き換えるのではなく、正しい行数を保持しようとしています。私たちが5行のコメントを削除したとすると、このスペースは5行の改行で埋められ、コードをバックトラックして正しい行番号で計算できるようにします。これまでRegExを使用してC++で複数行のコメントを取り除く
マイコード:
std::regex singleLinedCommentReg("//.*");
sourceCode = std::regex_replace(sourceCode, singleLinedCommentReg, std::string(""));
std::regex multiLinedCommentReg("(/\\*([^*]|[\r\n]|(\\*+([^*/]|[\r\n])))*\\*+/)");
std::for_each(
std::sregex_iterator(sourceCode.begin(), sourceCode.end(), multiLinedCommentReg),
std::sregex_iterator(),
[&](const std::match_results<std::string::const_iterator>& match) -> bool {
// TODO: Replace the current match with an appropriate number of newlines.
return true;
}
);
は誰もが私にその上のいくつかのアドバイスを与えることはできますか?
EDIT#1
私はそれをやってこの種の正規表現を使用する意味があるかどうかの議論についてのコメントを刺激したくないを行います!入力がきれいで、期待どおりであると仮定してください。
それはあなたが思うほど簡単ではありません。ソース 'string s =" not/a/* comment ... "; ' –
あなたの質問に投稿したコードがあなたの正規表現を壊すだろうと考えると、かなり大胆な仮定です。 – Gerald
おそらく、いくつかの翻訳フェーズを実行する必要があります。行の継続は他のほとんどがレクチャーされる前に実行されます:http://codepad.org/LbarZgMg –