正規表現を使用する場合は、現在の正規表現を少し変更できます。これは、$0 グループに探しているものが含まれているためです。
BEGIN:VBODY\n?((?:[^\n]*\n+)+?)END:VBODY
基本的に、起こったことは次のように([^\n]*\n+)+
なりました(?:[^\n]*\n+)+?
(この部分を怠惰にする方が安全かもしれません)
そして、その部分全体を括弧で囲みます:((?[^\n]*\n+)+?)
この前に追加\n?
して、出力を少しきれいにしました。
正規表現以外のソリューションは、次のようなものです。
string str = @"N:
TEL:+65123345
END:VCARD
BEGIN:VENV
BEGIN:VBODY
Date:8/11/2013 11:59:00 PM
thi is a test message
Hello this is a test message on line 2
END:VBODY
END:VENV
END:VENV
END:VMSG";
int startId = str.IndexOf("BEGIN:VBODY")+11; // 11 is the length of "BEGIN:VBODY"
int endId = str.IndexOf("END:VBODY");
string result = str.Substring(startId, endId-startId);
Console.WriteLine(result);
出力:
Date:8/11/2013 11:59:00 PM
thi is a test message
Hello this is a test message on line 2
イデオンデモ