俺は昔からテキストエディタは秀丸エディタを愛用している。
スクリプト系の言語だと、IDE なんか起動せず、エディタ上でちゃちゃっと(新規開発も含めて)やっちゃう人、多いだろう。
あと、テストデータの作成とか。
特に、テストデータなんか作ってると、タブ区切りされた項目の1番目と5番目の項目を入れ替えてえなあ・・・なんてこともよくある話で(まあ、その程度なら、Excel とかで読み込んで編集してもいいんだけど(^^;)、その点、秀丸エディタは正規表現(性器表現じゃねえぞ!)も使えるから楽勝・・・
だったはずなのだが、今まではそういう時に秀丸エディタは使ってなかったんだよね。
例えば、Perl の正規表現で、タブで区切られた5個の項目を逆順に並べようとすると(仮に1~3番目の項目が数値のものだけ・・・という条件つけてみよう)、
$str =~ s/^(\d+)\t(\d+)\t(\d+)\t(.+?)\t(.+)$/$5\t$4\t$3\t$2\t$1/;
みたいな感じか。(実際はタブまで括って処理するけど、今回はわかりやすいようにタブはマッチングさせてないよ)
で、秀丸エディタで同じことをすると・・・いや、こういうのを秀丸エディタでしたことなかった。実は以前、「マッチした部分」をどう表現していいか、ヘルプを見てもまったくわからなかったので、それ以来置換では正規表現を使ったことがなかったのだ。(検索ではバリバリ使ってるけど)
Perl の正規表現だと、上記のように、カッコで括った部分が、それぞれ $1~$5 という特殊な変数にセットされる。
秀丸エディタで「マッチした部分を指定するのはカッコじゃねえけど、じゃ、なんなの?」と、「マッチした文字列はどう表現すればいいの?」が分かんなかったのだ。
答えは、「カッコではなく \f」「マッチした部分は、$0 から順にセットされていく」
書き方は↓こう。
変換前^[0-9]+\f\t\f[0-9]+\f\t\f[0-9]+\f\t\f.+\f\t\f.*$変換後$8\t$6\t$4\t$2\t$0
注意しないといけないのは、カッコ()のように「囲む向き」が無いので、\f と \f で囲まれたところは全て $0~$X にセットされるということ。(正確には \f は「囲む」わけではなく「区切る」だけだけどな)
上の例では、項目の間のタブコードも変数にセットされる。
なので、「$8$6$4$2$0」みたいに歯抜けになるのだ。
あ、それと、Perl だと $1~$X だけど、秀丸エディタは $0 スタートね。
Perl の正規表現のように、多重にカッコで括ったりは出来ないようなので、あまり複雑なマッチングは厳しいが、これでかなりのことが秀丸エディタで出来るようになった。
さっそく、昨日、数百件あるテストデータの直しを正規表現使って一発で行ったよ。
手作業でいちいち治してたら、1時間くらいかかったであろうことを 1分で(笑)
(ま、実際 1時間もかかるような直しするなら変換用のちょいプロ書くけどな(笑))
ま、何にせよ、正規表現、最高(笑)
コメントする