这个东西本来是用于解析sql语句的,写出来之后感觉很多地方都可能用到,可能不是很符合你的要求,使用的时候需要注意。
这个方法用于匹配成对出现的括号,获取括号中的内容。
//获取配对括号中的内容 public List GetBracketList(string strIn) { List list2 = null; List list = new List(); bool isStartValue = false; int i = 0; //将所有的括号按照前后顺序找出来,放到一个List里边 foreach (char str in strIn) { //如果遇到单引号,则不添加到List,除非单引号成对出现以后 if (str.ToString() == "'") { isStartValue = !isStartValue; } if (str.ToString() == "(" || str.ToString() == ")") { //单引号成对出现之后,才允许添加到list if (!isStartValue) { list.Add(new SQLBracket(str.ToString(), i)); } } i++; } //如果左、右括号不是成对出现的,返回null if (list.Count % 2 != 0) { return null; } //获取左、右括号对 list2 = new List(); if (list.Count > 0) { //使用一个双遍历,首先获取左括号,然后查找右括号 for (int k = 0; k < list.Count; k++) { //如果是左括号 if (list[k].Code == "(") { //考虑到括号嵌套的可能性,需要计算配对括号之间还有多少括号需要配对 int distanceleft = 0; int distanceRight = 0; for (int j = k + 1; j < list.Count; j++) { //如果在左括号之后发现右括号之前又发现左括号,计数 if (list[j].Code == "(") { distanceleft++; } //如果发现右括号 if (list[j].Code == ")") { //检查右括号是否和左括号级次相等,如相等将左括号和右括号添加到配对表中,并跳出查找右括号的循环 if (distanceRight == distanceleft) { list2.Add(new SQLBracketPair(list[k], list[j], strIn.Substring(list[k].Index + 1, list[j].Index - list[k].Index - 1))); break; } //如果还不是匹配的右括号,计数 distanceRight++; } } } } } return list2; } /// /// 定义一个括号 /// public class SQLBracket { public SQLBracket(string code, int index) { Code = code; Index = index; } public string Code { get; set; } public int Index { get; set; } } /// /// 定义一个括号对 /// public class SQLBracketPair { public SQLBracketPair(SQLBracket leftBracket, SQLBracket rightBracket, string include) { LeftBracket = leftBracket; RightBracket = rightBracket; Include = include; } public SQLBracket LeftBracket { get; set; } public SQLBracket RightBracket { get; set; } public string Include { get; set; } }
关键字: 括号
发表评论
相关文章
国内AI资源汇总,AI聊天、AI绘画、AI写作、AI视频、AI设计、AI编程、AI音乐等,国内顺畅访问,无需科学上网。
扫码或点击进入:萤火AI大全
文章分类
最新评论