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(??) '()内でマッチした文字列 ・さんぷるこーど
  1. Sub SampleCode()  
  2.   
  3.     Dim Reg As Object, result As Object  
  4.   
  5.     Set Reg = CreateObject("VBScript.RegExp")  
  6.   
  7.       
  8.   
  9.     Reg.Pattern = "〒((\d{3})-(\d{4}))" '正規表現セット  
  10.   
  11.       
  12.   
  13.     Set result = Reg.Execute("〒123-4567"'検査する文字列  
  14.   
  15.     Dim x As Integer, y As Integer  
  16.   
  17.     If 0 < result.Count Then  
  18.         Debug.Print "マッチした数  :" & result.Count  
  19.         Debug.Print ""  
  20.         For x = 0 To result.Count - 1  
  21.             Debug.Print "何文字目にマッチ:" & result.Item(x).FirstIndex  
  22.             Debug.Print "マッチの文字数 :" & result.Item(x).Length  
  23.             Debug.Print "マッチした文字列:" & result.Item(x).Value  
  24.             Debug.Print "()でヒットした数:" & result.Item(x).Submatches.Count  
  25.               
  26.             If 0 < result.Item(x).Submatches.Count Then '()内でマッチした内容を表示  
  27.                 For y = 0 To result.Item(x).Submatches.Count - 1  
  28.                     Debug.Print result.Item(x).Submatches.Item(y)  
  29.                 Next  
  30.             End If  
  31.         Next  
  32.     End If  
  33.   
  34.     Debug.Print "---"  
  35. 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 件のコメント: