VBA で正規表現を使う(RegExp オブジェクトのメソッド)
2018/03/25
RegExp オブジェクトのメソッド
RegExp オブジェクトの詳細に関しては、VBA で正規表現を使う(RegExp オブジェクト)、プロパティの詳細に関しては、RegExp オブジェクトのプロパティ を参照してください。
Test メソッド
指定された文字列を正規表現で検索した結果、パターンに一致する文字列が検索されたかどうかを判定します。
object.Test ( string )
引数・戻り値
- object ・・・ 対象となる RegExp オブジェクトを指定します。
- string ・・・ 正規表現による検索の対象となるテキスト文字列を指定します。
- 戻り値 ・・・ ブール型(Boolean)。パターンに一致する文字列が見つかると True、見つからないと False を返します。
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 |
Sub Sample_RegExp_Test() ' 参照設定:Microsoft VBScript Regular Expressions 5.5 Dim re As RegExp Dim myStr1 As String Dim myStr2 As String Dim orgStr As String Set re = New RegExp orgStr = "abc def ghi jkl abc ghi" re.Pattern = "abc" If re.Test(orgStr) Then myStr1 = "検索文字列「" & re.Pattern & "」は見つかりました。" Else myStr1 = "検索文字列「" & re.Pattern & "」は見つかりませんでした。" End If re.Pattern = "fgh" If re.Test(orgStr) Then myStr2 = "検索文字列「" & re.Pattern & "」は見つかりました。" Else myStr2 = "検索文字列「" & re.Pattern & "」は見つかりませんでした。" End If MsgBox "検索文字列=""" & orgStr & """" & vbCrLf & myStr1 & vbCrLf & myStr2 End Sub |
実行結果
Replace メソッド
正規表現で検索して見つかった文字列を置換します。
object.Replace ( string1, string2 )
引数・戻り値
- object ・・・ 対象となる RegExp オブジェクトを指定します。
- string1 ・・・ 検索および置換の対象となるテキスト文字列を指定します。
- string2 ・・・ 置換するテキスト文字列を指定します。
- 戻り値 ・・・ 正規表現で検索し、マッチした文字列を引数 string2 で指定した文字列に置き換えた文字列を返します。マッチするものが見つからなかった場合は、元の文字列(引数 string1 で指定した文字列)を返します。
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
Sub Sample_RegExp_Replace() ' 参照設定:Microsoft VBScript Regular Expressions 5.5 Dim re As RegExp Dim myStr As String Dim orgStr As String Set re = New RegExp orgStr = "abc def ghi jkl abc ghi" re.Pattern = "abc" re.Global = True myStr = "置換前:" & orgStr & vbCrLf myStr = myStr & "置換後:" & re.Replace(orgStr, "xyz") MsgBox myStr End Sub |
実行結果
Execute メソッド
正規表現で検索した結果を Matches コレクションとして返します。
object.Execute ( string )
引数・戻り値
- object ・・・ 対象となる RegExp オブジェクトを指定します。
- string ・・・ 正規表現による検索の対象となるテキスト文字列を指定します。
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 |
Sub Sample_RegExp_Execute1() ' 参照設定:Microsoft VBScript Regular Expressions 5.5 Dim re As RegExp Dim mc As MatchCollection Dim m As Match Dim myStr As String Dim orgStr As String Dim i As Long Set re = New RegExp orgStr = "aabbcc axxyyzzc ghi jkl abbaac ghi" re.Pattern = "a.+?c" '「a」で始まり「c」で終わる文字列(最短)に一致 re.Global = True Set mc = re.Execute(orgStr) For i = 0 To mc.Count - 1 Set m = mc.Item(i) myStr = myStr & m.FirstIndex & ":" & _ vbTab & m.Value & "(" & _ m.Length & ")" & vbCrLf Next i MsgBox "位置:" & vbTab & "値(長さ)" & vbCrLf & myStr End Sub |
実行結果
Matches コレクション
Count プロパティ
<取得>
object.Matches.Count
引数・戻り値
- object ・・・ 対象となる RegExp オブジェクトを指定します。
- 戻り値 ・・・ Execute メソッドにより取得した Matche オブジェクトの数。
Item プロパティ
<取得>
object.Matches [.Item] (number)
引数・戻り値
- object ・・・ 対象となる RegExp オブジェクトを指定します。
- number ・・・ インデックス値(0 から Matches.Count – 1 までの数値)を指定します。
- 戻り値 ・・・ Execute メソッドにより取得した Matche オブジェクト。
Matche オブジェクトのプロパティ等
FirstIndex プロパティ
マッチした部分の位置を取得します。
<取得>
object.FirstIndex
引数・戻り値
- object ・・・ 対象となる Matche オブジェクトを指定します。
- 戻り値 ・・・ 検索文字列の最初の位置を0とするオフセット値。
Length プロパティ
マッチした文字列の長さを取得します。
<取得>
object.Length
引数・戻り値
- object ・・・ 対象となる Matche オブジェクトを指定します。
Value プロパティ
マッチした文字列を取得します。
<取得>
object.Value
引数・戻り値
- object ・・・ 対象となる Matche オブジェクトを指定します。
SubMatches コレクション
正規表現で検索を実行すると、サブ条件が取得を示す () (カッコ)で囲まれている場合にサブマッチ文字列が 0 個以上作成されます(SubMatches コレクション)。SubMatches コレクションの各項目へは、SubMatches(number) の形でアクセスします。
<取得>
object.SubMatches( number )
引数・戻り値
- object ・・・ 対象となる Matche オブジェクトを指定します。
- number ・・・ 0 以上 SubMatches.Count -1 までのインデックス値を指定します。
- 戻り値 ・・・ SubMatches コレクション。SubMatches コレクションの各項目は、正規表現によって検索および取得される文字列です。
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 |
Sub Sample_RegExp_Execute2() ' 参照設定:Microsoft VBScript Regular Expressions 5.5 Dim re As RegExp Dim mc As MatchCollection Dim m As Match Dim myStr As String Dim tmpStr As String Dim orgStr As String Dim i As Long Set re = New RegExp orgStr = "AAAAA BB001 AA202 jk345 abcde i030k X12345" '「アルファベット大文字のグループ」「数値のグループ」に一致 re.Pattern = "([A-Z]+)([0-9]+)" re.Global = True Set mc = re.Execute(orgStr) For Each m In mc myStr = myStr & m.FirstIndex & ":" & vbTab tmpStr = "" For i = 0 To m.SubMatches.Count - 1 If tmpStr <> "" Then tmpStr = tmpStr & " - " & m.SubMatches(i) Else tmpStr = tmpStr & m.SubMatches(i) End If Next i myStr = myStr & tmpStr & vbCrLf Next m MsgBox myStr End Sub |
実行結果
正規表現のパターン例
| 検索内容 | 正規表現のパターン例 |
| メールアドレス | ^([\w]+)([\w\.-]+)@([\w_\-]+)\.([\w_\.\-]*)[a-z][a-z]$ |
| HTMLのタグ | <(.*)>.*<\/\1> |
| ひらがな(5文字) | [あ-ん]{5} |
| カタカナ(3文字以上) | [ア-ン]{3,} |
| 半角カタカナ(5文字以下) | [ヲ-゚]{1,5} |
| 半角英数(5文字以上10文字以下) | [a-zA-Z0-9]{5,10} |
| 郵便番号 | ^(\d{3})-(\d{4})$ |
| 電話番号(市外局番含む) | ^0(\d{1}-\d{4}|\d{2}-\d{3}|\d{3}-\d{2}|\d{4}-\d{1})-\d{4}$ |
| 電話番号(携帯) | ^0[7|8|9|]0-\d{4}-\d{4}$ |
関連記事
-
-
色の設定(Color プロパティ・RGB 関数)
Color プロパティ Color プロパティは、指定したオブジェクトの色を取得 …
-
-
出力位置、書き込み位置を設定(Tab 関数)
出力位置、書き込み位置を設定 Tab 関数 は、Print メソッド、または P …
-
-
文字列:文字列の空白を削除(Trim 関数, LTrim関数, RTrim関数)
Trim 関数・LTrim 関数・RTrim 関数の使い方 【書式】 <先頭と末 …
-
-
変数が数値型かどうかをチェックする( IsNumeric 関数 )
IsNumeric 関数の使い方 【書式】 result = IsNumeric …
-
-
式を評価し、結果(真・偽)に応じた式・値を返す(IIf 関数)
IIf 関数 の使い方 IIf(アイイフ)関数は、式を評価してその結果(真・偽) …
-
-
日付時刻:日付・時刻の間隔を取得( DateDiff 関数 )
DateDiff 関数の使い方 【書式】 result = DateDiff ( …
-
-
オートシェイプの種類を表す定数(MsoAutoShapeType 列挙型)
MsoAutoShapeType 列挙型 オートシェイプオブジェクトの図形の種類 …
-
-
IME の現在の状態を取得します(IMEStatus 関数)
IMEStatus 関数の使い方 【書式】 result = IMEStatus …
-
-
変数がEmpty 値かどうかをチェックする( IsEmpty 関数 )
IsEmpty 関数の使い方 【書式】 result = IsEmpty ( e …
-
-
日付時刻:時・分・秒を取得(Hour、Minute、Second 関数)
日付時刻から時・分・秒を取得する関数 【書式】 time_hour = Hour …



