LoginSignup
2
3

More than 5 years have passed since last update.

VBAの正規表現の参照設定の5.5 と 1.0の違い

Posted at

ヒントは1999年の文章

https://msdn.microsoft.com/ja-jp/library/ms974619.aspx
December 13, 1999
日本語版最終更新日 2000 年 11 月 21 日
Microsoft Windows Script 5.5 の最終リリースにより、Microsoft は先進的な ECMA-262 (ECMAScript) の実装を提供するという約束を果たしました。バージョン 5.5 の Windows Script は、既存のスクリプト コードとの互換性を保つために必要ないくつかの違いを除いて、バージョン 3 の ECMAScript に準拠しています。ECMAScript バージョン 3 の変更点は、言語そのものの根本的な改善ではなく、もっぱら組み込みオブジェクトの拡張に関するものです。この記事では、JScriptR と Visual BasicR Scripting Edition (VBScript) 5.5 のいくつかの新機能を簡単に紹介します。

VBScript について

これまで、VBScript の正規表現のサポートは JScript のサポートほど完全なものではありませんでしたが、VBScript 5.5 ではようやくそのギャップが埋まりました。VBScript (および VBScript.RegExp COM コンポーネント) には、サブマッチと置換関数を含む、JScript の正規表現のすべての機能が含まれています。

VBScript におけるサブマッチ

VBScript 5.5 は、JScript と同じように格納を行うための括弧 (サブマッチ) をサポートするようになりました。この新しい機能は、Execute メソッドが返す個々の Match オブジェクトごとに SubMatches コレクションを用意することによって実装されています。次に、電子メール アドレスのコンポーネントを取得するための単純な例を示します (ただし、これは電子メール アドレスをマッチングするための完全な正規表現ではありません)。

Microsoft VBScript Regular Expressions 5.5 とMicrosoft VBScript Regular Expressions 1.0の違いはSubMatchオブジェクト

正規表現を参照設定するには5.5が1.0のいずれかを選択しなければならない。同時に指定した場合は5.5を優先順位の上にしなければならない。では何が違うか。1.0(5.0まで)SubMatchがないのである。

vb.net
Dim SMs As SubMatches

これは1.0を参照設定するか5.5より1.0を優先するとエラーになる。

正規表現はIeのエンジンだった

正規表現によるマッチング - officetanaka魚拓

VBAから正規表現を使うには、VBScriptが便利です。ただし、正規表現をサポートしているVBScriptはVer5.0からですから、IE5.0がインストールされているパソコンでないと使えません。
VBScriptの中で正規表現エンジンを提供しているのはRegExpオブジェクトです。参照設定によるEarly Bindingか、CreateObject関数を使ったLate Bindingで参照します。ここではLate Bindingによるサンプルを紹介します。

まずは、正規表現で使用するオブジェクトとプロパティやメソッドを整理しましょう

この中にSubmatchコレクションが存在しない。Version5.0までSubMatchは存在しないのである。

バージョン情報次の表は、ホスト アプリケーションによって実行される Microsoft Visual Basic Scripting Edition のバージョンの一覧です。

SubMatchは5.5からだが、この表から、これはIE5.5を入れていないと動かないことがわかる。
 Jscriptの方がネットと親和性が高いが、正規表現がJscriptが先行したのもIEのエンジンに近かったからだと理解できる。つまり正規表現はIEのエンジンであり、いまだにIEのエンジンを使っているのである。

しかし、VBAでの正規表現はPerlやRuby,Javaといったメジャーなプログラミング言語と異なる点が多く、そういった言語でのプログラミングに習熟している方が戸惑うことも多いと思われます。

これもMSの正規表現の成り立ちを見るとよくわかる。テキスト検索のためではなく、あくまでもIE+JAVAからきているからだ。JscriptはJavaにとって代わろうとして作られた言語である。もちろん現在は完全に敗北し、ほとんど知られていない。IEでもIE11では標準では動かない。

2
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
3