SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

特集記事

VBAで正規表現を使う

RegExpオブジェクトの利用

  • X ポスト
  • このエントリーをはてなブックマークに追加

最短一致

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

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

最短一致の例
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 コレクション
修正履歴

この記事は参考になりましたか?

  • X ポスト
  • このエントリーをはてなブックマークに追加
特集記事連載記事一覧

もっと読む

この記事の著者

さなみ(サナミ)

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

  • X ポスト
  • このエントリーをはてなブックマークに追加
CodeZine(コードジン)
https://codezine.jp/article/detail/1655 2007/10/27 17:18

おすすめ

アクセスランキング

アクセスランキング

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー

アクセスランキング

アクセスランキング