Что-то некорректно работает при автоопределении типа (выбирается тип_предок - Object вместо Match), вследствие чего недоступны некоторые поля найденных вхождений Matches с циклом foreach. Если тип задать явно до/внутри foreach, то проблемы нет.
###
uses System.Text.RegularExpressions;
var str:='FTWANFYEBMAXDSILWJQYAMDZPTXYFDPMWATBAVKEVWPTISZTNKNYBUGQMQBLYXYDIBPXKAEXT';
///ТАК НЕ РАБОТАЕТ
foreach var z in regex.Matches(str,'W.{3}A') do println(z.Index,z.Value);
///ТАК РАБОТАЕТ
foreach var z:System.Text.RegularExpressions.Match in regex.Matches(str,'W.{3}A') do println(z.Index,z.Value);
///И ТАК РАБОТАЕТ
//var z:System.Text.RegularExpressions.Match;
//foreach z in regex.Matches(str,'W.{3}A') do println(z.Index,z.Value);
///И ТАК РАБОТАЕТ
//var mtc:=regex.Matches(str,'W.{3}A');
//for var z :=0 to mtc.Count-1 do println(mtc[z].Index,mtc[z].value);
ну я понимаю, что проблема не самого компилятора, потому что он то,как раз подсказывает что тип будет Match. я даже не уверен, что тему создал для решения проблемы. наверное больше для того чтобы показать возможные варианты обхода проблемы. спасибо за Ваш ответ.
Если Вы перестанете в язык тащить конструкции из .NET так, как это было в C#, у Вас уйдут многие проблемы.
##
var str:='FTWANFYEBMAXDSILWJQYAMDZPTXYFDPMWATBAVKEVWPTISZTNKNYBUGQMQBLYXYDIBPXKAEXT';
foreach var z in str.Matches('W.{3}A') do println(z.Index,z.Value)