DOBON.NET DOBON.NETプログラミング掲示板過去ログ

正規表現(?<name1-name2>)に関して

環境/言語:[vb.net Framework 1.1 ]
分類:[.NET]

初めまして電子メールのテキスト置換等に正規表現をよく使っています。
(?<name1>)とするとグループに名前をつけることができたり便利ですね。

最近MSDNを読み返していたら(?<name1-name2>)というのがあったのですが
これはどう使ったらいいのでしょう?説明を何度読み返しても理解不能です。
”正規表現 グループ化構成体”で検索しても使用例が見つかりませんでした。

なにか具体例がありましたらご教授下さい。 宜しくお願いします。
■No16278に返信(もんすけさんの記事)
自己レスです。以下のようなプログラムで動作チェックしたところ

Dim mc As MatchCollection
Dim Str As String = "abAcababcabZcdefg"
Dim Ptn As String = "(?<start>A)(?:.*?)(?<end>Z)cd(?<start-end>)"
mc = Regex.Matches(Str, Ptn)
If mc.Count <> 0 Then
For i As Integer = 0 To mc.Count - 1
Dim gp As GroupCollection = mc.Item(i).Groups
For j As Integer = 0 To gp.Count
Debug.WriteLine(i & ":" & j & ":" & gp.Item(j).ToString)
Next
Next
End If

こんな結果になりました
'0:0:AcababcabZcd
'0:1:cd
'0:2:
'0:3:
たしかにMSDNの説明どおり本来1<start>にはAが2<end>にはZが入っているはずなのに2<end>が削除されて1<start>には2<end>と3<start-end>の間隔が代入されています。
(?<start-end>)は単なる区切りを示す記号のように使用できるみたいです。
一致する文字列間の情報に興味がある場合は使えるかもしれません。
どうもありがとうございました。
解決済み!

DOBON.NET | プログラミング道 | プログラミング掲示板