我正在使用Regex.Matches()从一个大型文本文件中解析一堆匹配项。
是否有任何关于此函数的文档保证Matches数组中的第一项对应于文本中的第一个匹配项,Matches数组中的第二项对应于文本中的第二个匹配项,依此类推?
基于Regex.Match的文档,这似乎是强烈暗示的,但我找不到证据表明Regex.Matches将始终按照它们在文本中被发现的顺序返回匹配项。
编辑
我发现了一个很棒的网站,允许您浏览.NET源代码。
所以从这里开始:http://referencesource.microsoft.com/#System/regex/system/text/regularexpressions/Regex.cs,8d8851eac21ceb80 我们看到matches返回一个新的MatchCollection,这并没有做什么,因为它延迟执行直到被使用。 http://referencesource.microsoft.com/#System/regex/system/text/regularexpressions/RegexMatchCollection.cs,682620f47b442b05,references 我们看到MatchCollection的主要数据结构是ArrayList,保证了顺序。
这对我来说已经足够保证了。
是否有任何关于此函数的文档保证Matches数组中的第一项对应于文本中的第一个匹配项,Matches数组中的第二项对应于文本中的第二个匹配项,依此类推?
基于Regex.Match的文档,这似乎是强烈暗示的,但我找不到证据表明Regex.Matches将始终按照它们在文本中被发现的顺序返回匹配项。
编辑
我发现了一个很棒的网站,允许您浏览.NET源代码。
所以从这里开始:http://referencesource.microsoft.com/#System/regex/system/text/regularexpressions/Regex.cs,8d8851eac21ceb80 我们看到matches返回一个新的MatchCollection,这并没有做什么,因为它延迟执行直到被使用。 http://referencesource.microsoft.com/#System/regex/system/text/regularexpressions/RegexMatchCollection.cs,682620f47b442b05,references 我们看到MatchCollection的主要数据结构是ArrayList,保证了顺序。
_regex = regex;
_input = input;
_beginning = beginning;
_length = length;
_startat = startat;
_prevlen = -1;
#if SILVERLIGHT
_matches = new List<Match>();
#else
_matches = new ArrayList();
#endif
_done = false;
GetMatch函数按照文本顺序运行正则表达式,并将每个匹配项添加到主ArrayList中。
Match match;
do {
match = _regex.Run(false, _prevlen, _input, _beginning, _length, _startat);
if (!match.Success) {
_done = true;
return null;
}
_matches.Add(match);
这对我来说已经足够保证了。
RegexOptions.RightToLeft
是做什么用的呢? - user4003407