5-2正規表現シンボル使用例
 一致する文字列は、下記プロシージャで実行した例です。
(1)文字クラス・繰り返し例1

正規表現▲▲ 説明 元データ(□□) 一致する文字列(●●)
A* 0個以上連続したAに一致 ABCDAAUYTRAAAERTK
 
 
 
(0)A(1)(2)(3)(4)AA(5)(6)(7)(8)
(9)AAA(10)(11)(12)(13)(14)
A+ 1個以上連続したAに一致 (0)A(1)AA(2)AAA
A. Aの次に何れかの1文字が
ある場合に一致
(0)AB(1)AA(2)AA(3)AE
AB?C AとCの間にBがないか,
Bがある場合に一致
(0)ABC
A{3} 3個のAに一致 AAAAbbAAccAAAAAddAAAA
;aaaAAAbbbABC.AA
 
 
 
(0)AAA(1)AAA(2)AAA(3)aaa(4)AAA
A{2,4} 2個以上,4個以内のAに一致 (0)AAAA(1)AA(2)AAAA(3)AAAA
(4)aaaA(5)AA(6)AA
[a-z]+ a〜zの何れか,つまり
アルファベット小文字を表す
(0)AAAAbbAAccAAAAAddAAAA
(1)aaaAAAbbbABC(2)AA
[A-Z]+ A-Zの何れか,つまり
アルファベット大文字を表す
(0)AAAAbbAAccAAAAAddAAAA
(1)aaaAAAbbbABC(2)AA
\w+ 1個以上の英数文字に一致 AAAA123AA65AAAAA789
AAAA;987798ABC.AA1234
 
(0)AAAA123AA65AAAAA789AAAA
(1)987798ABC(2)AA1234
\d+ 1個以上の数字に一致 (0)123(1)65(2)789(3)987798
(4)1234

(2)文字クラス・繰り返し例2
正規表現▲▲ 説明 元データ(□□) 一致する文字列(●●)
AA|BB|CC 選択 AAACCCBBBDDD
aacc,B01,A01,a02A03,A04y
 
 
 
 
(0)AA(1)CC(2)BB(3)aa(4)cc
A(01|02|03) グループ化 (0)A01(1)a02(2)A03
^A 行の最初 (0)A
Y$ 行の最後 (0)y
[^ABC]+ A以外の文字 (0)DDD(1),(2)01,(3)01,(4)02
(5)03,(6)04y
\s+ 空白,タブ AAA CCC BBB DDD aacc,
B01,A01,a02A03, A04y
 
 
 
0(1) (2) (3) (4)
\S+ 空白文字以外 (0)AAA(1)CCC(2)BBB(3)DDD
(4)aacc,B01,A01,a02A03,(5)A04y
\d+ 数値文字 (0)01(1)01(2)02(3)03(4)04
\D+ \d以外 (0)AAA CCC BBB DDD aacc,B(1),A(2),a
(3)A(4), A(5)y
\w+ 英数文字かアンダーバー ああabcいい123KJHエエ
え_XYZ;9875.87sdfg
 
(0)abc(1)123KJH(2)_XYZ(3)9875
(4)87sdfgh
\W+ \w以外の文字 (0)ああ(1)いい(2)エエえ(3);(4).

 ・下記マクロをExcelの標準モジュールに貼り付ければ実行できます。
 ・上表の確認は、□□が元データ(B5セルデータ)で、▲▲へ正規表現シンボルを記入し実行。
Sub 検索サンプル()   Dim reg As Object
  Dim itti As Object  Dim dat As String
 
dat = Cells(5, 2) 'B5セルの内容が元データ(□□)
 
Set reg = CreateObject("VBScript.RegExp")
reg.Pattern = "▲▲" '検索する正規表現パターン
reg.Global = True '検索範囲はグローバル
reg.IgnoreCase = True '大文字・小文字を区別しない 
Set itti = reg.Execute(dat)
For i = 0 To itti.Count - 1 '(●●) Cells(5, 4) = Cells(5, 4) & "(" & i & ")" & itti.Item(i).Value
NextEnd Sub

(3).正規表現の捕捉説明
 ・このページは下記プロシージャで実行確認しました(Excelの標準モジュールに貼り付ければ実行できます)
 ・上表の確認は、□□が元データ(B5セルデータ)で、▲▲へ正規表現シンボルを記入し実行。
Sub 検索サンプル()   Dim reg As Object
  Dim itti As Object  Dim dat As String
 
dat = Cells(5, 2) 'B5セルの内容が元データ(□□)
 
Set reg = CreateObject("VBScript.RegExp")
reg.Pattern = "▲▲" '検索する正規表現パターン
reg.Global = True '検索範囲はグローバル
reg.IgnoreCase = True '大文字・小文字を区別しない 
Set itti = reg.Execute(dat)
For i = 0 To itti.Count - 1 '(●●) Cells(5, 4) = Cells(5, 4) & "(" & i & ")" & itti.Item(i).Value
NextEnd Sub

?は書く場所により意味が異なり解かりづらい。整理すると以下の使用方法があります。
[1]?の使い方(一般的な?)
正規表現▲▲ 説明 元データ(□□) 一致する文字列(●●)
html? 直前の正規標記の当てはまる
文字がゼロ個または1個を指定。
ここ例はhtml、htmの両方を拾う
ABC.html、 def.htm (0)html(1)htm
<p>.+?</p> </p>の前に最短一致記号?を
付けると、1個のタグを拾える
(?がない場合は下記)
<P>abc</P><P>def</P>
 
(0)<P>abc</P>(1)<P>def</P>
<p>.+</p> これは最長マッチングで、途中
</p>が出てきているのですが、
そこでは止まらず、最後の</p>
までマッチしています。
(0)<P>abc</P><P>def</P>
A(?:xx|yy)B この(?:○○)は(括弧)でくくって
あるが、捕捉グループではない
単なるグループとなる。
AxxB,AyyB (0)AxxB(1)AyyB

[2]?の使い方(前方参照?)
正規表現▲▲ 説明 元データ(□□) 一致する文字列(●●)
長野産りんご   あああ長野産りんごイイイ (0)長野産りんご
長野産(?=りんご) 長野産の直後にりんごがあること あああ長野産りんごイイイ (0)長野産
長野産(?!りんご) 長野産の直後にりんごがないこと あああ長野産りんごイイイ ヒットなし
長野産(?!りんご) 長野産の直後にりんごがないこと あああ長野産ぶどうイイイ (0)長野産

[3]?の使い方(後方参照?)
正規表現▲▲ 説明 元データ(□□) 一致する文字列(●●)
(?<=長野産)りんご りんごの前に長野産があること あああ長野産りんごイイイ 実行時エラー5017
後方参照?はVBAではエラー発生で
使用不可のようだ
(?<!長野産)りんご りんごの前に長野産がないこと あああ長野産りんごイイイ
(?<!長野産)りんご りんごの前に長野産がないこと あああ青森産りんごイイイ

[4]その他の記述位置で意味が変わるケース
正規表現▲▲ 説明 元データ(□□) 一致する文字列(●●)
^A 行の最初 AAACCCBBBDDD
aacc,B01,A01,a02A03,A04y
 
(0)A
[^ABC]+ こちらの^はABC以外の文字 (0)DDD(1),(2)01,(3)01,(4)02
(5)03,(6)04y



【戻る】    【Top画面】   【HPへ】