public static void Execute(IOptions snapshot, ResultsViewModel results, RegexMethod regexMethod, TesterMode testerMode)
        {
            try
            {
                results.Reset();

                if (testerMode == TesterMode.Invoke)
                {
                    if (regexMethod == RegexMethod.Match)
                    {
                        ExecuteMatch(snapshot, results);
                    }
                    else if (regexMethod == RegexMethod.Replace)
                    {
                        ExecuteReplace(snapshot, results);
                    }
                    else if (regexMethod == RegexMethod.Split)
                    {
                        ExecuteSplit(snapshot, results);
                    }
                }
                else if (testerMode == TesterMode.CsCode)
                {
                    ExecuteCsCode(snapshot, results, regexMethod);
                }
                else if (testerMode == TesterMode.VbCode)
                {
                    ExecuteVbCode(snapshot, results, regexMethod);
                }
            }
            catch (Exception ex)
            {
                results.SetText(ex.ToString());
            }
        }
        static void ExecuteReplace(IOptions snapshot, ResultsViewModel results)
        {
            var regex = snapshot.CreateRegex(1000);

            if (snapshot.MultilineInput)
            {
                var checker = new Checker(SanityLimit, 5000);
                var lines   = Line.Split(snapshot.InputText);
                var list    = new List <LineReplacement>();

                for (var i = 0; i < lines.Length; i++)
                {
                    if (checker.Terminated)
                    {
                        break;
                    }

                    var line   = lines[i];
                    var result = regex.Replace(line.Value, snapshot.ReplacementText);
                    list.Add(new LineReplacement(line, i + 1, result));

                    checker.Adjust();
                }

                results.SetGrid(new LineReplacements(list.ToArray()), checker.State);
            }
            else
            {
                var input  = snapshot.InputText;
                var result = regex.Replace(input, snapshot.ReplacementText);

                results.SetText(result);
            }
        }
        static void ExecuteVbCode(IOptions snapshot, ResultsViewModel results, RegexMethod regexMethod)
        {
            var template = new Generators.VbCodeTemplate(snapshot, regexMethod);

            results.SetText(template.TransformText());
        }