2017-10-15 5 views
2

以下は、私が土曜日の値を取得するサンプルテストケースを示しています。以下は私が得たものですが、何らかの理由で私は "愚か者"を含むことになります。どんな助けも素晴らしいだろう。ありがとう!一致した文字列の一部のみを詰め込む方法は?非キャプチャグループ

Sub regex_practice() 
Dim pstring As String 

pstring = "foo" & vbCrLf & "Blah" & vbCrLf & vbCrLf & "Saturday" 
'MsgBox pstring 

Dim regex As Object 
Set regex = CreateObject("VBScript.RegExp") 

With regex 
    .Pattern = "(?:Blah)((.|\n)*)Saturday" 
    .Global = True 'If False, would replace only first 
End With 


Set matches = regex.Execute(pstring) 

答えて

2

もちろんです。非捕捉グループは全体のマッチに含まれます。あなたが探しているのは、ここで適切なキャプチャグループをつかむことです。

With regex 
    .Pattern = "Blah[\s\S]*?(Saturday)" 
    .Global = True 'If False, would replace only first 
End With 


変更

With regex 
    .Pattern = "(?:Blah)((.|\n)*)Saturday" 
    .Global = True 'If False, would replace only first 
End With 

その後.SubMatchesを使用します。

If regex.test(pstring) Then 
    Set matches = regEx.Execute(pstring) 
    GetSaturday = matches(0).SubMatches(0) 
End If 

さらに((.|\n)*)ではなく、例えば使用し、かなり悪いです[\s\S]*?

+2

'(。| \ n)*'は、むしろ悪くはありません。恐ろしいです。 ElasticSearchでない限り、提案しないでください。ところで、どのcharにもマッチするネイティブのES5構造体は '[^]'ですが、 '[\ s \ S]'は問題ありません。 –

+0

ありがとう!これは本当に大変役に立ちます。そして、私はここから(。| \ n)*構造を得ました(2回目の答え)190 upvotes lol。 https://stackoverflow.com/questions/159118/how-do-i-match-any-character-across-multiple-lines-in-a-regular-expression – user60887

+0

@ user60887:リンクされた質問では:* JavaScript( '[\ s \ S] *) 'と同じアプローチを使用してください。* btwを助けることがうれしいです。 – Jan

関連する問題