我使用 .NET Regex 作为一个简单的词法分析器:
var pattern = new Regex("(?<if>if)|(?<then>then)|(?<int>\-?\d+)...");
var tokens = pattern.Matches(input).Cast<Match>()
.Select(m => new Token { Text = m.Value, Type = TokenTypes.First(tt => !string.IsNullOrEmpty(m.Groups[tt].Value) });
匹配后,我可以通过遍历所有代表令牌类型的命名组并找到实际匹配的组来确定每个令牌的类型。不过,这似乎有点缓慢和笨拙。我想知道:有没有更好的方法来使用 .NET Regex API 查找所有匹配的组?