private List <StrPoint> FindAllUnion(string sql) { List <StrPoint> findStack = new List <StrPoint>(); var patterns = new string[] { "^UNION\\s+ALL", "^\\(", "^\\)", "^'", "^UNION" }; var curPoint = 0; var subSql = sql; do { foreach (var keyWord in patterns) { var meetContent = ""; if (StartWith(subSql, keyWord, out meetContent)) { findStack.Add(new StrPoint() { Pattern = keyWord, ActualContent = meetContent, Point = curPoint }); break; } } //开心消消乐 '(' ')'消去 SqlMacher.ClearCombo(findStack, patterns[1], patterns[2]); //开心消消乐 ''' '''消去 SqlMacher.ClearCombo(findStack, patterns[3], patterns[3]); //开心消消乐 '(' 'mainWord' ')'消去 SqlMacher.ClearCombo(findStack, patterns[1], patterns[2], patterns[0], patterns[4]); //开心消消乐 ''' 'mainWord' '''消去 SqlMacher.ClearCombo(findStack, patterns[3], patterns[3], patterns[0], patterns[4]); ++curPoint; subSql = subSql.Substring(1, subSql.Length - 1); } while (!string.IsNullOrWhiteSpace(subSql)); return(findStack); }
/// <summary> /// 获取所有匹配的点 /// </summary> /// <param name="sql"></param> /// <param name="mainWord"></param> /// <returns></returns> private List <StrPoint> GetAllMatchPoint(string sql, string mainWord) { List <StrPoint> findStack = new List <StrPoint>(); var patterns = new string[] { mainWord, "^\\(", "^\\)", "^'" }; var curPoint = 0; var sb = new StringBuilder(sql); do { foreach (var keyWord in patterns) { string meetContent; if (StartWith(sb.ToString(), keyWord, out meetContent)) { findStack.Add(new StrPoint() { Pattern = keyWord, ActualContent = meetContent, Point = curPoint }); } } //开心消消乐 '(' ')'消去 SqlMacher.ClearCombo(findStack, patterns[1], patterns[2]); //开心消消乐 ''' '''消去 SqlMacher.ClearCombo(findStack, patterns[3], patterns[3]); //开心消消乐 '(' 'mainWord' ')'消去 SqlMacher.ClearCombo(findStack, patterns[1], patterns[2], mainWord); //开心消消乐 ''' 'mainWord' '''消去 SqlMacher.ClearCombo(findStack, patterns[3], patterns[3], mainWord); ++curPoint; if (sb.Length > 0) { sb.Remove(0, 1); } } while (sb.Length > 0); return(findStack); }