VZユーザーのための,VWXによる正規表現利用のてびき
初出:nifty:FGALDC/MES/13/09142〜 (2002/06/18〜2002/07/21)
『
』はAND演算子です。ORは論理和で,ANDは論理積ですね。ベン図では,ふたつの要素の重なった部分です。AかつBの条件を満たす文字列にマッチします。・・・
えーとですね,大変申し訳ないのですが,この項目は省略させていただきます。
…って済めばよいのですが,そうもいかないですよね。(^^;
条件式の場合に,
if ( code >= 'A' && code <='Z' )
…のように書くところは,便利な文字クラスの範囲指定[A-Z]で済んでしまいますよね。さて,どういうことでしょう。
VWXはおそらくGREPの『
』をひきずっているのではないでしょうか。通常GREPはパターンにマッチした文字列を少なくともひとつ含む行を出力すればよいので,マッチした文字列があると判断した行をさっさと出力し,急いで次を探しにかかります。これはGREPとしてはあたりまえの動作ですが,文字列単位で検索を要求される場合はいかにもざっくりとしていますね。とりわけ置換を要求される場合は,ある行で置換がひとつ発生すると次の行にさっさと処理対象を移されてしまっては,結果を信頼できないことになってしまいます。
例えばSEDには置換のグローバルオプションが存在し,同じ行にふたつ以上の置換すべき文字列があればすべて同様に処理してくれますが,VZの置換コマンドはグローバルが基本ですから,期待する動作と異なってしまうことになりますね。
実は,この現象は『
』においても発生します。試しにこのテキスト上で,
マッチ|文字列,マッチ&文字列,文字列|マッチ,文字列&マッチ
…を検索してみてください。前方・後方に検索したときで,ヒットするものにばらつきがあるはずです。
結論としては,VWXで選択式による検索を行う場合は注意が必要で,選択式による置換は行わないということになるでしょう。