Вы можете использовать что-то вроде:
MatchCollection nonGreedyMatches = Regex.Matches("abcd", @"(((ab)c)d)");
Тогда у вас должно быть три обратных ссылки с ab, abc и abcd.
Но, если честно, такого рода регулярные выражения не имеют особого смысла, особенно когда они становятся больше, они становятся нечитаемыми.
Edit:
MatchCollection nonGreedyMatches = Regex.Matches("abcd", @"ab.?");
И, между прочим, вы получили ошибку там. Это может соответствовать только ab и abc (читай: ab + любой (необязательный) символ
Ленивая версия:
MatchCollection greedyMatches = Regex.Matches("abcd", @"ab.*");
есть:
MatchCollection nonGreedyMatches = Regex.Matches("abcd", @"ab.*?");