« VBAでインターネットに接続する | メイン | ファイルを分割・復元する »

VBAで正規表現を使用する

RegExpオブジェクトを使用するためには、
Microsoft VBScript Regular Expressions 5.5の参照設定をオンにしてください。
VBScriptのオブジェクトなんですね。

詳しくは正規表現のMSDNを見てね
http://www.microsoft.com/japan/msdn/columns/scripting/scripting051099.asp
http://www.microsoft.com/japan/msdn/columns/scripting/scripting121399.asp

URLからドメイン名を抽出するサンプルです。
ドメイン名は、URLのうち//と/で囲まれる文字列で、はじめのwww.以外の部分としました。
ソースコードの核はたった2行です。検索パターンの設定と、置換の実行です。
正規表現は、短いコードで強力な文字列操作が可能となります。


Sub ドメイン抽出()
Dim 正規表現オブジェクト As New RegExp
Dim 対象文字列 As String
Dim 検索パターン As String
Dim 置換後文字列 As String

対象文字列 = "http://www.microsoft.com/japan/msdn/columns/scripting/scripting051099.asp"
検索パターン = "^http:/(/www.|/)([^/]+)/.+"
置換後文字列 = "$_" & vbNewLine & "ドメイン:$2"

正規表現オブジェクト.Pattern = 検索パターン
MsgBox 正規表現オブジェクト.Replace(対象文字列, 置換後文字列)

End Sub

正規表現を使いこなすには検索パターンの文法を覚えなければなりません。
サンプルでは、^http:/(/www.|/)([^/]+)/.+の部分です。
では、ちょっと解説
はじめの^http:/(/www.|/)は文字列がhttp:/ではじまり、次が/www.か/であることを表現しています。
次の([^/]+)はスラッシュ以外の連続する文字列です。ここがドメイン名となります。
最後の/.+はスラッシュとそれ以後に連続する0個以上の文字を示します。

上のサンプルではさらに置換後文字列にも工夫があります。
マッチ文字列$を使用している点です。
$_は対象文字列全体をあらわします。
&2は検索パターンの2番目の括弧にマッチする文字列という意味で、([^/])の部分のことです。

ちょっと複雑なサンプルですね。。
おまけにテキストファイルを置換するツールを作っちゃいました。
実はこのツール、ステップバイステップのhtmlコードを修正をしたかったのが、キッカケです。

ひとつ前の投稿は「VBAでインターネットに接続する」です。
次の投稿は「ファイルを分割・復元する」です。

トラックバック

このエントリーのトラックバックURL:
http://www.xillion.net/mova/mt-tb.cgi/68

コメントを投稿

(いままで、ここでコメントしたことがないときは、コメントを表示する前にこのブログのオーナーの承認が必要になることがあります。承認されるまではコメントは表示されません。そのときはしばらく待ってください。)

About

2005年02月07日 00:00に投稿されたエントリーのページです。

メインページアーカイブページも見てください。

Powered by
Movable Type 3.34