【大喜利】【投稿~11/22】このサンタクロースは偽物だと気付いた理由とは?

こんにちは
秀丸の正規表現でうまくいかないことがあって質問します。

テキストファイルの中で複数行にわたるコメントアウト部分があります。

/* たとえばここから
ここまでの間が
コメントアウトに
なっている
複数行です */

こうした複数行にわたるコメントアウトを一括で削除したいのですがうまい方法が見つかりません。

「/\*.*\n」で1行目を指定して、その後に続けて「(.*[^(*/)]\n)*」としてみました。

「([^(*/)]*\n)*」は、任意の文字列の後に */ 以外の文字に続いて改行があるパターンを複数回指定しているつもりですが、上記の例だと「/\*.*\n([^(*/)]*\n)*」でヒットするのは「コメントアウトに」の部分までです。この正規表現の最後のアスタリスクを{0,}や{3,10}などに変えても結果は同じです。これを「/\*.*\n([^(*/)]*\n)*([^(*/)]*\n)*」のように繰り返すともう1行多くヒットするのですが、繰り返し回数を無制限にして一括で削除する方法にはなりません。

改行をまたぐと最長マッチにならないのでしょうか?

あるいは、いったん改行をファイルに出現しない文字(たとえば★など)に置き換えて、/*から*/を削除した後で★を改行に戻すのが実践的なやりかたなのでしょうか?

A 回答 (4件)

すみません、No.3のやり方では



/*comment*/
program
/*comment*/

の場合のprogram行まで削除してしまいますね。
量子指定* を控えめマッチ指定*?に変更してお試しください。
    • good
    • 0

秀丸のヘルプの正規表現の記述によるとVer8.00以降で、かつ、コメント行の最大値に制限がありますが以下でできそうです。



(?#maxlines:10)/\*(.*\n)*.*\*/

この例ではmaxlines:10としているので改行が10個、つまり最大11行のコメントまで削除可能です。

ご参考まで。
    • good
    • 0

直接的な回答ではありませんが、コメントを削除するツールがいくつかありますので、それを使用されてはいかがでしょうか。


http://www.vector.co.jp/soft/win95/prog/se451469 …
http://www.vector.co.jp/soft/win95/prog/se414076 …

上記はC/C++のコメント削除用ツールです。
    • good
    • 0

秀丸の正規表現は詳しくないから何が起きているのかとかどう指定すればいいのかとかはわからんけど, 少なくとも


「([^(*/)]*\n)*」

「任意の文字列の後に */ 以外の文字に続いて改行があるパターンを複数回指定している」
ことにならないことは分かる.

[^(*/)]

「(, *, /, ) 以外の文字」
って意味だから.
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています


おすすめ情報