正規表現で括弧に囲まれた値を複数得たい


hijiki  2008-10-15 15:52:45  No: 140662  IP: 192.*.*.*

VBで正規表現を使おうとしています。

asda(AAAA)jspfidjfpsd(BBBB);padpo;mdas(CCCC)adsdas

という文字列があったとして、その中の括弧で囲まれたAAAAとBBBBとCCCCを取得する正規表現はどうなりますか?

たとえば\(.*\)とすると最初の(と最後の)で括られている、(AAAA)jspfidjfpsd(BBBB);padpo;mdas(CCCC)全部が引っかかってしまいます。

どうかお助けください。
よろしくお願いします。

編集 削除
魔界の仮面弁士  2008-10-15 16:37:54  No: 140663  IP: 192.*.*.*

> VBで正規表現を使おうとしています。

どの正規表現ライブラリをお使いでしょうか?

フリーソフトの JRE32.DLL、VBScript の RegExp オブジェクト、
.NET の Regex クラスなど、幾つかの候補がありますよね。



> 括弧で囲まれたAAAAとBBBBとCCCCを取得する正規表現はどうなりますか?

「VBScript + RegExp オブジェクト」だとしたら、こんな感じ。

source = "asda(AAAA)jspfidjfpsd(BBBB);padpo;mdas(CCCC)adsdas"
Set re = New RegExp
re.Global = True
re.Pattern = "\([^\(\)]*(?=\))"
s = ""
For Each m In re.Execute(source)
  s = s & Mid(m.Value, 2) & vbCrLf
Next
MsgBox s


「.NET の Regex クラス」だとしたら、こんな感じ。


Option Strict On
Option Explicit On
Imports System
Imports System.Text
Imports System.Text.RegularExpressions
Module Module1
  Sub Main()
    Dim source As String = "asda(AAAA)jspfidjfpsd(BBBB);padpo;mdas(CCCC)adsdas"
    Dim r As New Regex("(?<=\()[^\(\)]*(?=\))", RegexOptions.Multiline)
    For Each m As Match In r.Matches(source)
      Console.WriteLine(m.Value)
    Next
  End Sub
End Module

編集 削除