いいですね。今やるべきことは、すべてのコメントブロックを次の形式に変換することです。
/**
*
*/
到着する:
/*!
*/
/**
ただし、定型句のライセンス形式を維持する必要があるため、次の行に「著作権」を含めることはできないことに注意することが重要です。
正規表現を使用すると簡単にできると思いますが、グループのキャプチャについてはよくわかりません。私は現在Perlで(悪い)解決策をハッキングしていますが、そこで適切に置き換える方法がわかりません。
編集:今は\/\*\*.*(?!Copyright)^\ *(?P<ast>\*).*(?=\*\/)//sm
、必要な機能がありますが、キャプチャされたグループだけをどのように変更しますか?
ベストアンサー1
複雑さがわからない単一の正規表現は確かに作業を実行しますが、理解し維持するのがより簡単なのはおそらく1行ずつパーサーになります。ただし、明らかな注意事項は、コメントなどの文字列がコメントされていないコード部分では簡単に難読化される可能性があります(CPANにはこの言語の語彙アナライザがあるかもしれません)。解析::MGCちょっと正式なやり方でこれらのことをします。)
#!/usr/bin/env perl
use strict;
use warnings;
my @comment;
# read stuff from standard input or files on argument line, whatever
LINE: while (<>) {
# assume this is a comment, start saving lines
if (m{^\s*/\*\*}) {
push @comment, $_;
next LINE;
}
if (@comment) {
push @comment, $_;
# here things end, or so we hope...
if (m{^\s*\*/}) {
# not copyright means fixup of the saved comment block...
if ($comment[1] !~ m/Copyright/) {
$comment[0] =~ s{/\*\*}{/*!};
if (@comment > 2) {
for my $i (1..$#comment-1) {
$comment[$i] =~ s{^(\s*)\*(\s)}{$1 $2};
}
}
}
# emit and reset
print for @comment;
@comment = ();
}
next LINE;
}
# hopefully only not-comment lines
print;
}