public CapturedCommand Matches(string strText) { CapturedCommand ccReturn = null; Match mtcCommandMatch = Regex.Match(strText, String.Format("^/?(?<scope>{0})(?<command>{1})[ ]?(?<arguments>.*)", String.Join("|", this.Scope.ToArray()), this.Command), RegexOptions.IgnoreCase); if (mtcCommandMatch.Success == true) { string strRemainderArguments = mtcCommandMatch.Groups["arguments"].Value; List <MatchArgument> lstMatchedArguments = new List <MatchArgument>(); int skippedBlankArguments = 0; foreach (MatchArgumentFormat argument in this.ArgumentsFormat) { if (argument.ArgumentValues != null && argument.ArgumentValues.Count > 0) { string strArgument = String.Empty; if (argument.ArgumentType == MatchArgumentFormatTypes.Dictionary) { int iMatchScore = MatchCommand.GetClosestMatch(strRemainderArguments, argument.ArgumentValues, out strArgument, out strRemainderArguments); if (iMatchScore != int.MaxValue) { lstMatchedArguments.Add(new MatchArgument(strArgument, iMatchScore)); } } else if (argument.ArgumentType == MatchArgumentFormatTypes.Regex) { foreach (string regexInput in argument.ArgumentValues) { Match argumentMatch = Regex.Match(strRemainderArguments, String.Format("^({0})", regexInput)); if (argumentMatch.Success == true && argumentMatch.Groups.Count >= 2) { strRemainderArguments = strRemainderArguments.Substring(argumentMatch.Value.Length, strRemainderArguments.Length - argumentMatch.Value.Length); lstMatchedArguments.Add(new MatchArgument(argumentMatch.Groups[1].Value, 0)); break; } } } } if (argument.ArgumentValues.Count == 0) { skippedBlankArguments++; } } if (lstMatchedArguments.Count == this.ArgumentsFormat.Count - skippedBlankArguments) { ccReturn = new CapturedCommand(mtcCommandMatch.Groups["scope"].Value, this.Command, lstMatchedArguments, strRemainderArguments); } } return(ccReturn); }