Vz resources : Regular Expression

耳より正規表現入門

VZユーザーのための,VWXによる正規表現利用のてびき
初出:nifty:FGALDC/MES/13/09142〜 (2002/06/18〜2002/07/21)

第18回  目次を出力してみよう (3) 正規表現利用上の鉄則

「鉄則」なんて言うとずいぶんおおげさですが,自分が正規表現を利用する場合にひと呼吸して考えることにしているシロート(なんでこんなやつが講座なんかやってるんだ?)なので,日ごろ気を付けていることを挙げてみます。

それってふつう経験的な教訓とか悔恨に属するものではないか?

(^_^;

鉄則(1) 急がば廻れ

まず,じっくりとテキストを研究しましょう。テキストデータというのはとりとめのない構造になっていることがむしろ多いのです。ほんの小さな規則の断片と大いなる例外を探しましょう。

検索であれば,思いきりよく色々なことを試してみましょう。ふつうは小さなパターンから順に組み立てていくのですが,いきなり書いてうまくいかないということを経験するのも,案外意味のあることかもしれません。大きなパターンを書いてみて,うまくいかなければパターンを順に小さくしていくという手法もけっこう役に立ちます。

鉄則(2) 二兎追う者は一兎も得ず

一挙に結果を出そうと思ってもうまくいかないことが多いのです。2段階の処理になっても,結果的に手っ取り早いことがしばしばあります。ごみを拾う可能性がそれほど多くなければ,先の例は^[0-9]でもよいわけです。拾ってしまったごみの量が少なければ,それを削除することを考えるだけで済みます。

一般にGREPの処理はマッチする行さえ出力できればそれでよいため,どのようにマッチしているか深く考えなくても済むことが多いのです。より完璧な結果を求めるあまり漏れを起こすような難解なパターンを書くよりも,パイプを使って2段階で処理をするという手法が勧められる場合も少なくありません。

鉄則(3) 転ばぬ先の杖

一方,置換の場合は注意する必要があります。正規表現の場合,最長一致の原則により,マッチしている範囲が非常にわかりにくいために,驚くほどごっそりとテキストが削除されることがありえます。そして最も問題なのは,通常の置換なら可能な逆置換ができないという点にあります。正規表現で置換を行う場合は,実行前に必ずテキストを保存しておきましょう。

先の2段階処理の中間ファイルを取っておくことも,ひとつの手でしょう。


The VZ resources. ©2002 by mezala. mailto:mezala@nifty.com