public LexicalMatch MatchBeginning(string value) { if (null == value) { throw new ArgumentNullException("value"); } if (0 == value.Length) { return(null); } var result = Match(value); if (null != result) { return(result); } var substring = new MutableString(value); var clone = substring.Clone(); #if NET20 foreach (var word in IEnumerableExtensionMethods.Reverse(substring.ToString().Split(' '))) #else foreach (var word in substring.ToString().Split(' ').Reverse()) #endif { if (0 == word.Length) { continue; } substring.RemoveFromEnd(word).Trim(); result = Match(substring); if (null == result) { continue; } result.Suffix = clone.Suffix(substring).Trim(); return(result); } return(null); }