CodeZine(コードジン)

特集ページ一覧

VBAで正規表現を使う

RegExpオブジェクトの利用

  • LINEで送る
  • このエントリーをはてなブックマークに追加
2007/10/22 14:00

目次

最短一致

 正規表現での文字列比較は、デフォルトでは最長一致になっていますが、量指定子("*"、"+"、"{}"等)の後に"?"を付けることで最短一致に変更できます。

 以下にサンプルを挙げておきます。

最短一致の例
Dim re As RegExp
Set re = New RegExp

re.Pattern = "あ.+お" '"あ"で始まり"お"で終わる文字列を表す
                      '正規表現(最長一致)

'文字列全体とマッチする
MsgBox re.Replace("あいうえおあいうえおあいうえお", "AIUEO") 

re.Pattern = "あ.+?お" '"あ"で始まり"お"で終わる文字列を表す
                       '正規表現(最短一致)
'最初の"あいうえお"のみマッチする。
MsgBox re.Replace("あいうえおあいうえおあいうえお", "AIUEO") 

後方参照

 後方参照を使うと、"( )"でグループ化した文字列を再度利用することができます。

 Testメソッドなどで、正規表現を定義するときに後方参照を利用する場合は、"\"文字の後にグループの番号を数字でを指定します。

 Replaceメソッドなどで、置換文字列を指定するときに後方参照を利用する場合は、"$"文字の後にグループの番号を数字でを指定します。

 以下のサンプルを参考にしてください。

Testメソッドで後方参照を使用した例
Dim re As RegExp

Set re = New RegExp
re.Pattern = "(.+)\1" '同じ文字列の繰り返しを表す正規表現

MsgBox re.Test("ABCABC") 'True
MsgBox re.Test("ABCDEF") 'False
MsgBox re.Test("わんわん") 'True
MsgBox re.Test("にゃんにゃん") 'True
MsgBox re.Test("コケコッコー") 'False
Replace()メソッドで後方参照を使用した例
Dim re As RegExp

Set re = New RegExp
re.Pattern = "(.+)\s(.+)" '氏名を表す正規表現
                          '姓と名をそれぞれグループ化する

'後方参照で姓と名をひっくり返す
MsgBox re.Replace("山田 太郎", "$2 $1") '太郎 山田
MsgBox re.Replace("田中 花子", "$2 $1") '花子 田中
MsgBox re.Replace("山本 一郎", "$2 $1") '一郎 山本

まとめ

 以上で説明を終わりますが、最後にラッパー関数を紹介したいと思います。毎回、RegExpをオブジェクトを作成するのは面倒ですので、実際は以下のような関数を自分のニーズに合わせて自作して利用すると良いでしょう。

検索関数
'[引数]
'RegExpr:正規表現パターン
'InputStr:検索文字列
'[返り値]
'InputStr内にRegExprが見つかった場合:True
'InputStr内にRegExprが見つからなかった場合:False
Function ExecRegExpr(RegExpr As String, InputStr As String) As Boolean
    Dim re As RegExp
    Set re = New RegExp
    re.Pattern = RegExpr
    ExecRegExpr = re.Test(InputStr)
End Function
置換関数
'[引数]
'RegExpr:正規表現パターン
'InputStr:検索文字列
'ReplaceStr:置換文字列
'[返り値]
'InputStr内にRegExprが見つかった場合:ReplaceStrに置き換えた結果を返す
'InputStr内にRegExprが見つからなかった場合
':InputStrに変更を加えずそのまま返す
Function ReplaceRegExpr(RegExpr As String, InputStr As String, ReplaceStr As String) As String
    Dim re As RegExp
    Set re = New RegExp
    re.Pattern = RegExpr
    re.Global = True
    ReplaceRegExpr = re.Replace(InputStr, ReplaceStr)
End Function

 それでは。

参考資料

  1. なかま's HP『サルにもわかる正規表現入門
  2. Wendy's Microsoft Office Note『文字列の操作1
  3. PHP で WEB作成『最短一致と最長一致
  4. MSDN『Clinick's Clinic on Scripting: 正規表現による Visual Basic Scripting Edition (VBScript) の機能強化
  5. MSDN『RegExp オブジェクト
  6. MSDN『Matches コレクション
  7. MSDN『Match オブジェクト
  8. MSDN『SubMatches コレクション
  • LINEで送る
  • このエントリーをはてなブックマークに追加

修正履歴

  • 2007/10/27 17:16 2007/10/27 "[ ]"の説明を訂正

著者プロフィール

あなたにオススメ

All contents copyright © 2005-2022 Shoeisha Co., Ltd. All rights reserved. ver.1.5