2013年1月5日土曜日

[ExcelVBA] 正規表現(まとめ)


正規表現とは、文字列の集合を一つの文字列で表現する方法の一つである。正則表現とも呼ばれ、形式言語理論の分野では比較的こちらの訳語の方が使われる。まれに正規式と呼ばれることもある。

正規表現のまとめをのっけときます。


■正規表現まず最初に・・・
Set オブジェクト1 = CreateObject("VBScript.RegExp")

オブジェクト1.Pattern = "正規表現"
オブジェクト1.IgnoreCase = (True|False) 'T:大文字小文字区別しない、F:区別する(デフォルト)
オブジェクト1.Global = (True|False) 'T:繰返しマッチする、F:繰返しマッチしない(デフォルト)


オブジェクト1.Test("検査文字列") '結果を(True|False)で返す
Set オブジェクト2 = オブジェクト1.Execute("検査文字列") '結果をオブジェクトで返す

オブジェクト2.Count 'マッチした数を返す< オブジェクト2.Item(?).FirstIndex '何文字目にマッチしたか返す(最初の文字は0) オブジェクト2.Item(?).Length 'マッチした文字数 オブジェクト2.Item(?).Value 'マッチした文字列 オブジェクト2.Item(?).SubMatches.Count 'マッチした文字列のうち()部分の数 オブジェクト2.Item(?).SubMatches.Item(??) '()内でマッチした文字列 ・さんぷるこーど
Sub SampleCode()
Dim Reg As Object, result As Object
Set Reg = CreateObject("VBScript.RegExp")

Reg.Pattern = "〒((\d{3})-(\d{4}))" '正規表現セット

Set result = Reg.Execute("〒123-4567") '検査する文字列
Dim x As Integer, y As Integer
If 0 < result.Count Then Debug.Print "マッチした数  :" & result.Count Debug.Print "" For x = 0 To result.Count - 1 Debug.Print "何文字目にマッチ:" & result.Item(x).FirstIndex Debug.Print "マッチの文字数 :" & result.Item(x).Length Debug.Print "マッチした文字列:" & result.Item(x).Value Debug.Print "()でヒットした数:" & result.Item(x).Submatches.Count If 0 < result.Item(x).Submatches.Count Then '()内でマッチした内容を表示 For y = 0 To result.Item(x).Submatches.Count - 1 Debug.Print result.Item(x).Submatches.Item(y) Next End If Next End If Debug.Print "---" End Sub

実行結果---
マッチした数  :1

何文字目にマッチ:0
マッチの文字数 :9
マッチした文字列:〒123-4567
()でヒットした数:3
123-4567
123
4567
---


■メタ文字一覧
メタ文字意味
.任意の一文字
[(文字列)][]内の任意の一文字
[^(文字列)][]内の文字列以外の任意の一文字。
[0-9]0~9のうち任意の一文字、[2-7]なら2~7の任意の一文字
\d0~9のうち任意の一文字。[0-9]は\dと同義
\D0~9以外の任意の一文字。[^0-9]。\d以外が\D
[a-zA-Z]任意のアルファベット一文字
\w[a-zA-Z_0-9]と同義
\W\w以外。[^a-zA-Z_0-9]。
\s空白文字(半角スペース,タブ,改行)の任意の一文字
\s空白文字(半角スペース,タブ,改行)以外の任意の一文字
\メタ文字をエスケープする
*0回以上繰り返す
+1回以上繰り返す
{m}m回繰り返す
{m,}m回以上繰り返す
{m,n}m回以上、n回以下繰り返す
?0回か1回繰り返す
||の前後のどちらかにマッチするか調べる
()グループ化および()内でマッチした内容を記憶する
(?:)()内でマッチした内容を記憶させない

0 件のコメント: