Не могли бы вы помочь мне понять, что не так.У меня есть обычный запрос SQL:
var SQL = "SELECT [Extent1].[RouteID] AS [RouteID]
FROM [RoutesEntities].[Routes] AS [Extent1]\r\n
INNER JOIN [dbo].[Locales] AS [Extent2]
ON [Extent2].[LocaleID] = [Extent1].[LocaleID]";
И мне нужно определить местоположение части FROM до ее псевдонима AS.Я сделал следующее с RegEx.Replace:
var pattern = @"(FROM[^(SELECT)]+?Routes.+?AS.+?\[?([^\]\s]+)\]?)";
var result = Regex.Replace(SQL, pattern, "$1 $2", RegexOptions.Singleline | RegexOptions.IgnoreCase);
И все работает нормально - это вернет:
match_$1 = "FROM [RoutesEntities].[Routes] AS [Extent1]";
match_$2 = "Extent1";
НО!Если я пытаюсь использовать Regex.Matches с теми же параметрами и той же входной строкой ... он находит только одно совпадение.
MatchCollection queryPlace = Regex.Matches(
SQL,
@"(FROM[^(SELECT)]+?Routes.+?AS.+?\[?([^\]\s]+)\]?)",
RegexOptions.IgnoreCase | RegexOptions.Singleline
);
match_$1 = "FROM [RoutesEntities].[Routes] AS [Extent1]";
ПОЧЕМУ ???Это ошибка, или я должен создать отдельную именованную группу для каждого подвыражения?Кто-нибудь знает, почему это происходит, почему только первый матч был найден?
PS Регулярное выражение верно - я уверен, вы можете проверить это здесь - http://www.gskinner.com/RegExr/
Спасибо, Артем