正規表現って使っていますか?正規表現とは、一つの形式パターンでいくつかの文字列をまとめて表現するための表現方法のことです。
たとえば、正規表現の[1-9]という表記は数値の1から9までをまとめて表現しています。[A-Z]という表記はアルファベット大文字のAからZまでをまとめて表現しています。
この正規表現を使って、正規表現の形式パターンにあった文字列を別の文字列に置換したり、マッチングして文字の位置を取得するなどの文字列の操作がVBAでは可能です。
この記事では、正規表現を使った文字列の操作について
- 正規表現とは
- RegExpオブジェクトの使い方
という基本的な内容から、
- Replaceメソッドで置換
- Executeメソッドでマッチング
など具体的な内容についても解説していきます。
今回は正規表現を使った文字列の操作について、使い方をわかりやすく解説します!
正規表現とは
正規表現とはいくつかの文字列を一つの形式でまとめて表現するための表現方法のことです。主な正規表現については下記のとおりになります。
正規表現:
記号 | 記号の説明 | 例 | 例の説明 |
---|---|---|---|
. | 任意の1文字。改行文字は除く。 | .+ | 任意の文字列 |
* | 直前の1文字の0回以上の繰り返しと一致 | hoge* | hogeもしくはhogee...と一致 |
^ | 行の先頭 | ^[0-9] | 行頭が数字 |
$ | 行の末尾 | ^.{10}$ | 10文字の行 |
[ ] | カッコ内の任意の1文字と一致。「-」で範囲指定可。 | [a-z] | 小文字のアルファベット1文字と一致 |
[^ ] | カッコ内の任意の1文字と不一致。「-」で範囲指定可。 | [^A-Z] | 大文字のアルファベット以外 |
+ | 直前の文字の1個以上の繰り返しと一致 | hoge+ | hogee...と一致 |
? | 直前の文字の0または1文字と一致 | hoge? | eと一致 |
{ } | カッコ内の数値の繰り返しと一致 | {n} | 直前の文字のn個の繰り返しと一致 |
{,n} | 直前の文字のn個以下の繰り返しと一致 | ||
{m,} | 直前の文字のm個以上の繰り返しと一致 | ||
{m,n} | 直前の文字のm個以上、n個以下の繰り返しと一致 | ||
| | 直前、直後どちらかのパターンに一致 | hoge|piyo | hogeまたはpiyo |
( ) | カッコ内をグループ化。マッチした内容は参照可。 | ー | ー |
RegExpオブジェクトの使い方
VBAで正規表現を使って文字列を操作するためには、VBScriptのRegExpオブジェクトを使用します。RegExpオブジェクトのプロパティとメソッドについて表にまとめます。
プロパティは以下のとおりです。
プロパティ | 説明 |
---|---|
Pattern | 正規表現で使用するパターンを設定 [1-9]、(やまだ|ヤマダ)などの正規表現パターン |
IgnoreCase | 大文字と小文字を区別しない場合はTrue デフォルト値はFalse |
Global | 検索対象の文字列内で、文字列全体を検索する場合はTrue デフォルト値はFalse |
これらのプロパティを使って正規表現によるマッチングの設定を行います。
'RegExpオブジェクトの作成 Dim reg As Object Set reg = CreateObject("VBScript.RegExp") '正規表現の指定 With reg .Pattern = "[0-9]" 'パターンを指定 .IgnoreCase = False '大文字と小文字を区別するか(False)、しないか(True) .Global = True '文字列全体を検索するか(True)、しないか(False) End With
メソッドは以下のとおりです。
メソッド | 説明 |
---|---|
Test | 正規表現によるマッチングを行い、 パターンと一致した場合はTrue |
Replace | 正規表現によるマッチングを行い、 マッチした場合はそのマッチ部分を置換文字列と置換 |
Execute | マッチングの結果をMatchesコレクションで返す |
MatchesコレクションはMatchオブジェクトの集合です。Matchesコレクションについては後ほど詳しく解説します。
ReplaceメソッドとExecuteメソッドの使い方について詳しくみていきましょう。
Replaceメソッドで置換
Replaceメソッドは正規表現にマッチした文字列を別の文字列で置換します。
Replaceメソッドは以下のように記述します。
object.Replace(string1, string2)
objectはRegExpオブジェクト名を指定します。
string1は検索および置換の対象となる文字列を指定します。string2は置換するテキスト文字列を指定します。
サンプルコードで使い方を確認しましょう。
Sub macro1() 'RegExpオブジェクトの作成 Dim reg As Object Set reg = CreateObject("VBScript.RegExp") '正規表現の指定 With reg .Pattern = "[0-9]" 'パターンを指定 .IgnoreCase = False '大文字と小文字を区別するか(False)、しないか(True) .Global = True '文字列全体を検索するか(True)、しないか(False) End With Dim str1 As String, str2 As String str1 = "東京1大阪2名古屋3" str2 = reg.Replace(str1, ",") '指定した正規表現を第2引数の区切り文字に置換 MsgBox str2 End Sub
実行結果:
このサンプルコードでは、Withステートメント内でRegExpオブジェクトregのプロパティを設定しています。正規表現パターンには数値を指定しています。
これをオブジェクトregから呼び出したReplaceメソッドを使って、文字列str1内の全ての数値を”,”(カンマ)に置換しています。
Executeメソッドでマッチング
Executeメソッドはマッチングの結果をMatchesコレクションで返します。
MatchesコレクションはMatchオブジェクトの集合です。Matchesコレクションのプロパティは以下のとおりです。
プロパティ | 説明 |
---|---|
Count | Matchesコレクション内のMatchオブジェクトの個数 |
Item | 一般的なコレクションのItemと同様 |
Matchオブジェクトのプロパティは以下のとおりです。
プロパティ | 説明 |
---|---|
FirstIndex | 最初にマッチングした位置 |
Length | マッチした文字列の長さ |
Value | マッチした文字列 |
Executeメソッドは下記のように記述して使用します。
Dim Matches ' Variant型を定義 Set Matches = object.Execute(string)
objectはRegExpオブジェクト名を指定します。stringは正規表現による検索の対象となる文字列を指定します。
Executeの使い方をサンプルコードで確認しましょう。
Sub macro2() 'RegExpオブジェクトの作成 Dim reg As Object Set reg = CreateObject("VBScript.RegExp") '正規表現の指定 With reg .Pattern = "[エンジニア]" 'パターンを指定 .IgnoreCase = False '大文字と小文字を区別するか(False)、しないか(True) .Global = True '文字列全体を検索するか(True)、しないか(False) End With Dim str As String, Matches str = "侍エンジニア" Set Matches = reg.Execute(str) '正規表現でのマッチングを実行 Dim msg As String For Each Match In Matches msg = msg & Match.Value & " が" & Match.FirstIndex & "文字目に見つかりました" & vbCrLf Next Match MsgBox msg End Sub
実行結果:
このサンプルコードでは、Withステートメント内でRegExpオブジェクトregのプロパティを設定しています。
正規表現パターンには”エ”、”ン”、”ジ”、”ニ”、”ア”のいずれかの文字を指定しています。これをオブジェクトregから呼び出したExcuteメソッドを使って、文字列str内の全ての文字に対してマッチングを行っています。
Excuteメソッドの戻り値はMatchesコレクションに格納され、For Eachステートメントを使ってオブジェクト1つずつにアクセスしています。
MatchオブジェクトのプロパティValueおよびFirstIndexを使って、マッチングした文字列と最初にマッチした位置をそれぞれ取得しています。
まとめ
ここでは、正規表現を使った文字列の置換とマッチングについて説明しました。
RegExpオブジェクトのReplaceメソッドとExecuteメソッドを使うことで正規表現を使って文字列を操作することができます。
使いこなすことができるように、この記事を何度も参考にして下さいね!