ツールとのマージでは、ソース行のコメントされていない部分のみを比較する必要があります。
そこで、実際のコード、つまりコメントを除くすべてのテキストに一致する正規表現を検出するフィルターを作成しようとしています。
おそらくこのようなもの:
^.*(?!((/\**([^*]|[\r\n]|(\*+([^*/]|[\r\n])))*\*+/)|(//.*)))
これは次のことを行います:
(/\*([^*]|[\r\n]|(\*+([^*/]|[\r\n])))*\*+/)|(//.*)
ソース: http://ostermiller.org/findcomment.html .
または貪欲でないマッチングを使用する: (/\*([\r\n]|.)*?\*/)|(//.*)
.
おそらくあなたのコンパイラが助けになるでしょう。ソースを前処理してコメントを削除するオプションがある場合もあります。たぶん、プリプロセッサはコメントのみを取り除くようにすることができます。これは、1 つのツールで 1 つのことを正しく行う Unix の方法です。C プリプロセッサは、コメントが何であるかを認識します (正規表現は解析のためのクルージですが、IMNSHO)。
lex
2 番目のオプションとして、コメント付きまたはコメントを認識するレクサーを書くのflex
は簡単です。ネット上にはたくさんの例があるはずです。どの検索エンジンでも、大量のヒットが表示されます。
アミンの答えは正しいですが、コメントを見つけて文字列から削除することもできます。
この正規表現は、すべてのコメントを提供します。
(/\*.*?\*/)|//.*?\n
これにより、一致が "" に置き換えられます (C++ を使用している場合)。
std::string str2 = std::tr1::regex_replace(string, regex, "");