Delphi ソースからコメントを削除する正規表現

拙作の SkRegExp に興味を示すガイジンさんがたまにいます。でも、ソースを開いてびっくりするようです。

ファイルが壊れているとか、ウィルスに感染しているとかメールをくれる人がいるくらいですからね。

それって日本語なんですけどね。NO VIRUS, It’s Japanese!!

てなわけで、SkRegExp の世界進出にはソースから日本語を削除する必要があると確信しました。

それならコメントを削除すればいいだろうと正規表現を書いてみました。もちろん、使うエンジンは SkRegExp です。

sStrings := '(''[^'']*?'')';
sCompiler := '({$.*?})';
sLineComment := '(//.*)$';
sBraceComment := '({[^}]*?})';
sPascalComment := '((*[^*]**+([^(*][^*]**+)*))';
LRegExp.MultiLine := True;
LRegExp.Expression := sStrings + '|' + sCompiler + '|' +
sLineComment + '|' + sBraceComment + '|' + sPascalComment;
Memo1.Lines.Text := LRegExp.Replace(Source, '$1$2');

考え方は以下の通り。

文字列(の中のコメントと同じ文字) sStrings と(コメントと似ている)コンパイラ指令 sCompiler はコメントではないのでマッチさせてそのまま残します。

あとは Delphi の3つのコメントにマッチする sLineComment、sBraceComment、sPascalComment をそれぞれ選択で一つにします。

この正規表現を使って ‘$1$2’ で置換すると、文字列とコンパイラ指令はそのまま残りますが、それ以外のコメントは消えてなくなります。

実は、このままだとちょっと遅いんですが、動作はわかりやすいと思います。速くするのはぜひそれぞれお考えください。

あ、遅いのは SkRegExp の Replace メソッドの手抜きも原因ですけどね。

コメントを残す

メールアドレスが公開されることはありません。