正規表現で指定のパターンがn番目に一致する文字列を取得する。
検索対象の文字列に対して、正規表現のパターンがn番目に一致した文字列を取得します。
VBAで正規表現を利用するにはRegExpオブジェクトを利用します。
n番目に一致した文字列を取得するにはRegExpオブジェクトのExecuteメソッドとMatchesコレクションを利用します。
サンプルコードでは検索対象の文字列の中で、「0から9で構成された3桁の数字」(※)をパターンとして指定しており、そのパターンで3番目に一致した文字列を検索させています。
※この条件をを正規表現で書くと”[0-9][0-9][0-9]”または”[0-9]{3}”となります。
このサンプルコードの「”ABC123DEF456GH789IJ000KLMN”」の場合、条件に一致する文字列で3番目に登場する文字列である”789″が取得されます。
'******************************************************************
' 指定したパターンがn番目に一致する文字列を取得
'******************************************************************
Sub Main_nMatch()
'検索対象の文字列
Dim sString As String
sString = "ABC123DEF456GH789IJ000KLMN"
'検索パターン
Dim sPattern As String
sPattern = "[0-9][0-9][0-9]"
'n番目を指定
Dim iNumber As Integer
iNumber = 3
'n番目に一致する文字列を取得
Dim vReturn As String
vReturn = runRegExp_Exe(sString, sPattern, iNumber)
If vReturn = "Error" Then
Debug.Print "指定した条件に一致する文字列はありません。"
Else
Debug.Print "指定した条件に一致する" & iNumber & "番目の文字列は「" & vReturn & "」です。"
End If
End Sub
'******************************************************************
' n番目に一致した文字列を取得
'------------------------------------------------------------------
' 第1引数:検索対象の文字列
' 第2引数:正規表現のパターン
' 第3引数:n番目を指定
'------------------------------------------------------------------
' 戻り値 :実行結果
' 条件に一致するn番目の文字列を返す
' 一致する文字が無ければ"Error"の文字列を返す
'******************************************************************
Function runRegExp_Exe(getStr As String, getPtn As String, getNum As Integer) As String
'0番目を指定ならエラーとして処理を抜ける
If getNum = 0 Then: runRegExp_Exe = "Error": Exit Function
Dim oReg As Object
Set oReg = CreateObject("VBScript.RegExp")
oReg.Pattern = getPtn '検索するパターンを設定
oReg.IgnoreCase = True '大文字と小文字を区別(True:しない、Flase:する)
oReg.Global = True '文字列全体を検索(True:する、Flase:しない)
'正規表現でのマッチングを結果をコレクションに設定
Dim oMatches As Object
Set oMatches = oReg.Execute(getStr)
'一致するパターンの有無のカウント数を確認(0なら一致なし)
If (oMatches.Count > 0) And (oMatches.Count >= getNum) Then
'n番目に一致した文字列を取得(Indexは0からカウント)
runRegExp_Exe = oMatches(getNum - 1).Value
Else
runRegExp_Exe = "Error"
End If
Set oMatches = Nothing
Set oReg = Nothing
End Function■実行結果



