using System;
using System.Collections.Generic;
using System.Text.RegularExpressions;
using System.Linq;
public class Test
{
public static void Main()
{
var strs = new List<string>() { "Boy has a dog and a cat.",
"Boy something a gerbil.",
"Sally owns a cat." };
foreach (var s in strs)
{
var results = Regex.Matches(s, @"(?:\G(?!\A)|^Boy\b).*?\b(dog|cat|gerbil)\b")
.Cast<Match>()
.Select(m => m.Groups[1].Value)
.ToList();
if (results.Count > 0) {
Console.WriteLine("{0}:\n[{1}]\n------", s, string.Join(", ", results));
}
else
{
Console.WriteLine("{0}:\nNO MATCH!\n------", s);
}
}
}
}
dXNpbmcgU3lzdGVtOwp1c2luZyBTeXN0ZW0uQ29sbGVjdGlvbnMuR2VuZXJpYzsKdXNpbmcgU3lzdGVtLlRleHQuUmVndWxhckV4cHJlc3Npb25zOwp1c2luZyBTeXN0ZW0uTGlucTsKcHVibGljIGNsYXNzIFRlc3QKewoJcHVibGljIHN0YXRpYyB2b2lkIE1haW4oKQoJewoJCXZhciBzdHJzID0gbmV3IExpc3Q8c3RyaW5nPigpIHsgIkJveSBoYXMgYSBkb2cgYW5kIGEgY2F0LiIsIAoJCQkiQm95IHNvbWV0aGluZyBhIGdlcmJpbC4iLAoJCQkiU2FsbHkgb3ducyBhIGNhdC4iIH07CgkJZm9yZWFjaCAodmFyIHMgaW4gc3RycykKCQl7CgkJCXZhciByZXN1bHRzID0gUmVnZXguTWF0Y2hlcyhzLCBAIig/OlxHKD8hXEEpfF5Cb3lcYikuKj9cYihkb2d8Y2F0fGdlcmJpbClcYiIpCgkJICAgICAgICAuQ2FzdDxNYXRjaD4oKQoJCSAgICAgICAgLlNlbGVjdChtID0+IG0uR3JvdXBzWzFdLlZhbHVlKQoJCSAgICAgICAgLlRvTGlzdCgpOwoJCSAgICAgaWYgKHJlc3VsdHMuQ291bnQgPiAwKSB7CgkJCUNvbnNvbGUuV3JpdGVMaW5lKCJ7MH06XG5bezF9XVxuLS0tLS0tIiwgcywgc3RyaW5nLkpvaW4oIiwgIiwgcmVzdWx0cykpOwoJCSAgICAgfQoJCSAgICAgZWxzZQoJCSAgICAgewoJCSAgICAgCUNvbnNvbGUuV3JpdGVMaW5lKCJ7MH06XG5OTyBNQVRDSCFcbi0tLS0tLSIsIHMpOwoJCSAgICAgfQoJCX0KCX0KfQ==