電気ウナギ的○○

About Home

秀丸エディタの正規表現がやっとわかってきた

shinoda (2012年2月10日 08:05)
俺は昔からテキストエディタは秀丸エディタを愛用している。
スクリプト系の言語だと、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時間もかかるような直しするなら変換用のちょいプロ書くけどな(笑))

ま、何にせよ、正規表現、最高(笑)

電気ウナギ的○○

電気ウナギ的○○

About Back

コメント(0)

電気ウナギ的○○

電気ウナギ的○○

About Back

トラックバック(0)

トラックバックURL: https://blog.netandfield.com/mt/mt-tb.cgi/1977

電気ウナギ的○○

About This Site

電気ウナギ的○○
岩国在住。広島で働く超零細IT企業社長のいわゆる社長日記。
何か、酒と食い物のことばかり書いているようで・・・お察しのとおり、肥満体です:-)


2011/06/24
iPhone用サイト公開

Create with jQuery, jQTouch.


CLOSE