クイック スタート
チュートリアル
ツール & 言語
リファレンス
書籍レビュー
正規表現ツール
grep
PowerGREP
RegexBuddy
RegexMagic
一般的なアプリケーション
EditPad Lite
EditPad Pro
言語 & ライブラリ
Boost
Delphi
GNU (Linux)
Groovy
Java
JavaScript
.NET
PCRE (C/C++)
PCRE2 (C/C++)
Perl
PHP
POSIX
PowerShell
Python
R
Ruby
std::regex
Tcl
VBScript
Visual Basic 6
wxWidgets
XML Schema
Xojo
XQuery & XPath
XRegExp
データベース
MySQL
Oracle
PostgreSQL
このサイトの詳細
はじめに
正規表現クイックスタート
正規表現チュートリアル
置換文字列チュートリアル
アプリケーションと言語
正規表現の例
正規表現リファレンス
置換文字列リファレンス
書籍レビュー
印刷可能なPDF
このサイトについて
RSSフィード & ブログ
RegexBuddy—The best regex editor and tester for VBscript developers!

VBScriptの正規表現サポート

VBScriptには、正規表現の組み込みサポートがあります。VBScriptを使用してクライアント側のWebページでユーザー入力を検証する場合、VBScriptの正規表現サポートを使用すると、記述する必要のあるコード量が大幅に削減されます。

Microsoftは、Internet Explorerのバージョン5.5でVBScriptの正規表現サポートにいくつかの大幅な拡張を加えました。バージョン5.5では、以前のバージョンのVBScriptになかった非常に多くの重要な正規表現機能が実装されています。このWebサイトでVBScriptに言及する場合は、VBScriptのバージョン5.5の正規表現サポートについて言及しています。

基本的に、Internet Explorer 5.5はJavaScriptの正規表現フレーバーを実装しています。ただし、IE 5.5はWeb標準で非常に高い評価を得ていませんでした。JavaScriptの正規表現の実装と実際の標準の間には、かなりの違いがあります。幸い、ほとんどは影響を与える可能性が低い特殊なケースです。したがって、このWebサイトでJavaScriptの正規表現フレーバーについて述べられていることはすべて、VBScriptにも当てはまります。最新バージョンのIEでは、互換モードでWebページをレンダリングする場合でも、IE 5.5の実装が引き続き使用されます。標準モードでは、最新バージョンのIEはJavaScript標準に非常に厳密に従っています。VBScriptの正規表現も、最新バージョンのIEがインストールされている場合でも、IE 5.5の実装を依然として使用しています。

JavaScriptとVBScriptは、Perlスタイルの正規表現を実装しています。ただし、Perlやその他の最新の正規表現フレーバーで利用できる多くの高度な機能が欠けています。

RegExpオブジェクトのバージョン1.0には、遅延量指定子のような基本的な機能さえありません。これが、このWebサイトでVBScript RegExp 1.0について議論しない主な理由です。5.5より前のすべてのバージョンのInternet Explorerには、RegExpオブジェクトのバージョン1.0が含まれています。1.0と5.5以外のバージョンはありません。

VBScript RegExpオブジェクトの使用方法

VBScriptで正規表現を使用するには、次の1つ以上のインスタンスを作成しますRegExpオブジェクト。このオブジェクトを使用すると、文字列内の正規表現の一致を見つけたり、文字列内の正規表現の一致を別の文字列に置き換えたりできます。VBScriptのRegExpオブジェクトによって提供される機能は、非常に基本的なものです。ただし、VBScriptで通常行われる単純な入力検証および出力フォーマットタスクには十分です。

RegExpオブジェクトの基本的な性質の利点は、非常に使いやすいことです。1つ作成し、正規表現を挿入して、一致または置換を実行します。使用できるプロパティは4つ、メソッドは3つだけです。

オブジェクトを作成したら、検索する正規表現をPatternプロパティに割り当てます。ユーザーが指定したものではなく、リテラルの正規表現を使用する場合は、正規表現を二重引用符で囲まれた文字列に入れます。デフォルトでは、正規表現は大文字と小文字が区別されます。IgnoreCaseプロパティをTrueに設定して、大文字と小文字を区別しないようにします。キャレットとドル記号は、デフォルトでは、対象文字列の先頭と末尾でのみ一致します。対象文字列が改行で区切られた複数の行で構成されている場合、これらの行の先頭と末尾でキャレットとドル記号が一致するようにするには、MultilineプロパティをTrueに設定します。VBScriptには、ドットを改行文字と一致させるオプションはありません。最後に、RegExpオブジェクトに最初の一致だけでなくすべての一致を返すか置換する場合は、GlobalプロパティをTrueに設定します。

'Prepare a regular expression object
Set myRegExp = New RegExp
myRegExp.IgnoreCase = True
myRegExp.Global = True
myRegExp.Pattern = "regex"

RegExpオブジェクトのプロパティを設定したら、3つのメソッドのいずれかを呼び出して、3つの基本タスクのいずれかを実行できます。Testメソッドは、正規表現をテストする文字列である1つのパラメーターを受け取ります。Testは、正規表現が文字列の(一部)と一致するかどうかを示すTrueまたはFalseを返します。ユーザー入力を検証する場合、通常は、文字列全体が正規表現と一致するかどうかを確認します。これを行うには、正規表現の先頭にキャレットを、末尾にドル記号を配置して、正規表現を対象文字列の先頭と末尾に固定します。

次のExecuteメソッドも、1つの文字列パラメーターを受け取ります。TrueまたはFalseを返す代わりに、MatchCollectionオブジェクトを返します。正規表現が対象文字列にまったく一致しない場合、MatchCollection.Countはゼロになります。次のRegExp.GlobalプロパティがFalse(デフォルト)の場合、MatchCollectionには最初の一致のみが含まれます。もしRegExp.GlobalがTrueの場合、Matches>にはすべての一致が含まれます。

次のReplaceメソッドは、2つの文字列パラメーターを受け取ります。最初のパラメーターは対象文字列で、2番目のパラメーターは置換テキストです。次のRegExp.GlobalプロパティがFalse(デフォルト)の場合、Replaceは、最初に見つかった正規表現と一致する部分(存在する場合)が置換テキストで置換された対象文字列を返します。もしRegExp.GlobalがTrueの場合、Replaceは、正規表現と一致するすべての部分が置換された対象文字列を返します。

空の文字列を置換テキストとして指定できます。これにより、Replaceメソッドは、正規表現と一致するすべての部分が削除された対象文字列を返します。置換の一部として正規表現の一致を再度挿入するには、$&を置換テキストに含めます。例:文字列内の各正規表現の一致を角かっこで囲むには、[$&]を置換テキストとして指定します。正規表現にキャプチャかっこが含まれている場合は、置換テキストで後方参照を使用できます。$1を置換テキストに挿入すると、最初のキャプチャグループで一致したテキストが挿入され、$22番目、など$9までです。置換にリテラルのドル記号を含めるには、Replaceメソッドに渡す文字列に、連続する2つのドル記号を入れます。

個々の一致に関する情報の取得

次のMatchCollection次のメソッドによって返されるオブジェクトRegExp.Executeは、Matchオブジェクトのコレクションです。読み取り専用のプロパティは2つだけです。Countプロパティは、コレクションが保持する一致の数を示します。Itemプロパティは、インデックスパラメーター(ゼロからCount-1の範囲)を受け取り、Matchオブジェクトを返します。Itemプロパティはデフォルトのメンバーであるため、MatchCollection(7)MatchCollection.Item(7).

の省略形として記述できます。コレクション内のすべての一致を処理する最も簡単な方法は、次のようなFor Each構成を使用することです。

' Pop up a message box for each match
Set myMatches = myRegExp.Execute(subjectString)
For Each myMatch in myMatches
  msgbox myMatch.Value, 0, "Found Match"
Next

次のMatchオブジェクトには、読み取り専用のプロパティが4つあります。FirstIndexプロパティは、一致の左側の文字列内の文字数を示します。文字列の先頭で一致が見つかった場合、FirstIndexはゼロになります。文字列の2番目の文字から一致が開始する場合、FirstIndexは1になります。これは、VBScriptのMid関数とは異なることに注意してください。この関数では、startパラメーターを1に設定すると、文字列の最初の文字が抽出されます。Lengthオブジェクトのプロパティは、一致する文字数を示します。MatchオブジェクトのValueプロパティは、一致したテキストを返します。

次のSubMatchesオブジェクトのプロパティは、一致する文字数を示します。Matchオブジェクトは、文字列のコレクションです。正規表現にキャプチャグループがある場合にのみ値を保持します。コレクションは、キャプチャグループごとに1つの文字列を保持します。Countプロパティは、コレクション内の文字列の数を示します。Itemプロパティは、インデックスパラメーターを受け取り、キャプチャグループによって一致したテキストを返します。Itemプロパティはデフォルトのメンバーであるため、SubMatches(7)SubMatches.Item(7)。残念ながら、VBScriptはキャプチャグループの一致位置と長さを取得する方法を提供していません。

残念なことに、SubMatchesプロパティは、SubMatches(0)として完全な正規表現の一致を保持しません。代わりに、SubMatches(0)は最初のキャプチャグループで一致したテキストを保持し、SubMatches(SubMatches.Count-1)は最後のキャプチャグループで一致したテキストを保持します。これは、他のほとんどのプログラミング言語とは異なります。例:VB.NETでは、Match.Groups(0)は正規表現の一致全体を返し、Match.Groups(1)は最初のキャプチャグループの一致を返します。これは、RegExp.Replaceメソッドに渡される置換テキストで使用できる後方参照とも異なることに注意してください。置換テキストでは、$1は他のほとんどの正規表現フレーバーが行うのと同じように、最初のキャプチャグループと一致したテキストを挿入します。$0は何も置換されず、文字どおりに挿入されます。

WebブラウザーでVBScriptのRegExpサポートをテストする

VBScriptの正規表現サポートの動作を示すWebページの例を作成しました。Internet Explorerを使用している場合は、Webブラウザーで今すぐ試すことができます。ソースコードは例の下に表示されます。

| クイック スタート | チュートリアル | ツール & 言語 |  | リファレンス | 書籍レビュー |

| grep | PowerGREP | RegexBuddy | RegexMagic |

| EditPad Lite | EditPad Pro |

| Boost | Delphi | GNU (Linux) | Groovy | Java | JavaScript | .NET | PCRE (C/C++) | PCRE2 (C/C++) | Perl | PHP | POSIX | PowerShell | Python | R | Ruby | std::regex | Tcl | VBScript | Visual Basic 6 | wxWidgets | XML Schema | Xojo | XQuery & XPath | XRegExp |

| MySQL | Oracle | PostgreSQL |