VZユーザーのための,VWXによる正規表現利用のてびき
初出:nifty:FGALDC/MES/13/09142〜 (2002/06/18〜2002/07/21)
さて,一通り正規表現の説明はしましたので,これで入門講座はおしまいです。いかがだったでしょうか。正規表現を使えばこのくらいのことがまあまあできる,というイメージができたらまずまずというところではないでしょうか。
正規表現の典型例というものは,どんな参考書を読んでもたいてい書いてあります。しかし,それらの例は英語圏では典型だけれども,日本においてはあまり役に立たないという印象を持たせるもので,却って正規表現を手の届きにくいものにしているような気がしてなりません。
とは言え,実際に例を挙げようと思っても,貧相な例しか思い付かないものなんですね。これはもちろん自分がテキスト処理に深くかかわってこなかったことの証しでもあるわけですが,「正規表現は使い捨て」という側面もあえて強調したいと思います。
「使い捨て」なんて言うと,あまり印象はよくありませんが,使えないものを大事に抱えているより,少なくともこの世界ではエコロジカルなことなのではないかな,と言い訳めいたことも言ってしまいましょう。「無」から自由に生成して「無」に帰すというのも,霞を食って屁をひる仙人の趣があるではありませんか。(なんのこっちゃ)
閑話休題。
さて,それでは最後のおまけです。
実はどれだけ正規表現を書いても,実際にどの文字列にマッチしているのか分からなかったりするわけです。検索中心に使っているかぎり,どこまでがマッチしている部分かなんてことはさほど気にしなくても済んでしまうのですが,置換を実行する前にどこがマッチするのかあらかじめ確認できれば,かなり安心な気がしますよね。
そこで,置換前の確認用に以下のマクロをお試しください。
----------^ matchstr.def ( date:2002-06-19 time:00:01 ) ----< cut here
=== matchstr.def v0.01 === by H.ear
マッチした文字列を視認する(VWXはv1.08bが必須)
* mad for vz!
35 ^R "" c#r, >00
36 ^C "" c#c, >>
0: &o(c) ;コマンドを実行
(r||mb||mp-2)?. ;中断にするモードなど
(vp.81&12)??{ ;schflag:検索オプション RX+ or ZH+
cx=vp..36, ;strln:通常の検索文字列長
>z
}
cx-, ax=$E908, bx='VW', &i($2F) ;マッチした文字列長の取得
:z &s #b cp+=cx, #B &d mb-, #] ;擬似ブロックで視認
*
----------$ matchstr.def ( lines:14 ) ----------------------< cut here
使用しているVWXのAPIファンクションは v1.08b ですので,製品版VZに同梱されている v1.07 を常駐した環境では絶対に実行しないでください。何が起こっても,わたしゃ責任持ちません。(つーか,v1.08b環境でも責任とれませんけど。)
本当はVWXのバージョンをチェックすることも可能ですが,常駐ソフトの環境はそうそう変更するものではありませんし,VMAP等であらかじめ確認することができますから,あえて省略しています。v1.07 のままの方は,この機会に v1.08b にバージョンアップしましょう。
(VWX v1.08bの所在は nifty:FGALDC/MES/16/01811)
使い方は簡単です。
これで『耳より正規表現入門』を終わります。
ご清聴いただき,ありがとうございました。
ご意見,ご感想をお待ちしています。mailto:mezala@nifty.com