2

ツールとのマージでは、ソース行のコメントされていない部分のみを比較する必要があります。

そこで、実際のコード、つまりコメントを除くすべてのテキストに一致する正規表現を検出するフィルターを作成しようとしています

おそらくこのようなもの:

^.*(?!((/\**([^*]|[\r\n]|(\*+([^*/]|[\r\n])))*\*+/)|(//.*)))
4

4 に答える 4

1

これは次のことを行います:

(/\*([^*]|[\r\n]|(\*+([^*/]|[\r\n])))*\*+/)|(//.*)

ソース: http://ostermiller.org/findcomment.html .

または貪欲でないマッチングを使用する: (/\*([\r\n]|.)*?\*/)|(//.*).

于 2012-08-23T10:44:23.337 に答える
0

おそらくあなたのコンパイラが助けになるでしょう。ソースを前処理してコメントを削除するオプションがある場合もあります。たぶん、プリプロセッサはコメントのみを取り除くようにすることができます。これは、1 つのツールで 1 つのことを正しく行う Unix の方法です。C プリプロセッサは、コメントが何であるかを認識します (正規表現は解析のためのクルージですが、IMNSHO)。

lex2 番目のオプションとして、コメント付きまたはコメントを認識するレクサーを書くのflexは簡単です。ネット上にはたくさんの例があるはずです。どの検索エンジンでも、大量のヒットが表示されます。

于 2012-08-23T11:29:31.523 に答える
0

アミンの答えは正しいですが、コメントを見つけて文字列から削除することもできます。

この正規表現は、すべてのコメントを提供します。

(/\*.*?\*/)|//.*?\n

これにより、一致が "" に置き換えられます (C++ を使用している場合)。

std::string str2 = std::tr1::regex_replace(string, regex, "");
于 2012-08-23T10:47:41.817 に答える