日期:2014-05-16 浏览次数:21099 次
//GetContents()功能是取得在str中,出现在 s 和e中间的内容,返回多个匹配结果
public static MatchCollection GetContents(string str, string s, string e)
{
Regex rg = new Regex("(?<=(" + s + "))[.\\s\\S]*?(?=(" + e + "))", RegexOptions.Multiline | RegexOptions.Singleline);
return rg.Matches(str);
}
static void Main(string[] args)
{
string str = " aaa 没意义的话\r\n 无所谓\r\n bbb 第一个要取的目标 MMM 乱塞的 \r\n 随便什么 ccc 输什么都行 \r\n 无论啦 \r\n 真的无所谓 bbb 奇怪这个为什么会取到 MMM 乱来的 \r\n 干扰的 aaa 无所谓的文字 \r\n 随便了 \r\n 没有也行 bbb 第二个要取的目标 MMM";
MatchCollection mc = GetContents(str, "aaa[.\\s\\S]*?bbb", "MMM");
for (int i = 0; i < mc.Count; i++)
{
Console.WriteLine(mc[i].ToString());
Console.WriteLine("--------------------------------------------------");
}
Console.ReadKey();
}
string str = " aaa 没意义的话\r\n 无所谓\r\n bbb 第一个要取的目标 MMM 乱塞的 \r\n 随便什么 ccc 输什么都行 \r\n 无论啦 \r\n 真的无所谓 bbb 奇怪这个为什么会取到 MMM 乱来的 \r\n 干扰的 aaa 无所谓的文字 \r\n 随便了 \r\n 没有也行 bbb 第二个要取的目标 MMM";
foreach (Match m in Regex.Matches(str, @"(?<=aaa[^M]*?bbb\s+)[\s\S]*?(?=\s+MMM)"))
{
Console.WriteLine(m.Value);
}