2011-09-10 20 views
0

VB.NETを使用すると、2-3の代わりに1ステップでこのRegEx呼び出しを行う方法はありますか?vb.netとRegExを使用してネストされた文字列内の文字列を検索する

私は「ビンゴ」という単語を見つけようとしています。つまり、開始語と終了語の間には何かがありますが、 も内側のFISHとCAKESの中にあります。私の最終結果はちょうど "ビンゴ"でなければなりません。

Dim s1 As String = "START (random string) FISH bingo CAKES (random string) END" 

Dim m As Match 

m = RegEx.Match(s1, "START\w*END") 
If (m.Success) Then 
    Dim s2 As String = m.Groups(0).ToString() 
    m = RegEx.Match(s2, "FISH\w*CAKES") 
    if(m.Success) then 
     s2 = m.Groups(0).ToString() 
     m = RegEx.Match(s2, "bingo") 
     s2 = m.Group(0).ToString() 
    End If 
End If 

答えて

1

ないVB.NETについて確認していますが、以下の正規表現使用して、内側「ビンゴ」をキャッチすることができます:「ビンゴ」は、最初の(そして唯一の)の試合になります

START.*FISH.*(bingo).*CAKES.*END 

をこの表現。

0

あなたは先読みと後読み使用することができます。

Dim s1 As String = "START (random string) FISH bingo CAKES (random string) END" 
Dim m As Match = RegEx.Match(s1, "(?<=\bSTART\b.*?\bFISH\s+)\w+(?=\s+CAKES\b.*?\bEND\b)") 
Dim s2 as String = m.Value() 

をしかし、私は@Alaudoが示唆したように、それはキャプチャグループを使用する方が簡単だと思う:

Dim m As Match = RegEx.Match(s1, "\bSTART\b.*?\bFISH\s+(\w+)\s+CAKES\b.*?\bEND\b") 
Dim s2 as String = m.Groups(1).Value() 
関連する問題