求正则表达式! 任意一字符串,将其用其中的分号分隔为多个子字串,但处于{}或()或''或“”或<>中的分号不参与分隔。各类括号有可能嵌套! 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 -_-#,果然是没有解决。我用有限状态机写了一个方法,自己测试认为可以了,但是在贴出来之前,我必须明确一下,楼主上一帖子里所给的例子showMSG("<div class='Desc'><u onclick=\"test('张三','111');\" style='cursor:hand'>[张三]</u>加入<u onclick=\"list('my'+this.innerHTML);\" style='cursor:hand'>同学会</u></div>");分割后的结果是什么,因为我无法理解楼主所给这个例子另外,楼主最好再给几个例子,同时给出结果,我好做测试请注意,我要的例子和结果,缺一不可 我这个列子有点问题,这个列子中只有最后一个参加分隔,结果就是前面showMSG("<div class='Desc'><u onclick=\"test('张三','111');\" style='cursor:hand'>[张三]</u>加入<u onclick=\"list('my'+this.innerHTML);\" style='cursor:hand'>同学会</u></div>")是一个字符串,后面是一个空字串。但这是一个最正常的例子。在举一列,try{xx("张三");}catch(tt){};return true;这句就分为三部分,一为try{xx("张三");}catch(tt){}二为return true三为一空字串 哈,这样才对嘛,你那个例子让我郁闷了好了阵^o^如下方法假定你的字符串中,{}、()等等都是配对出现的,没有加入不配对的检查,如有这个需要,说明一下,楼主再测一下,如果有不符合的,给出例子private List<string> GetSplit(string src){ int sbracket = 0; //尖括弧 int rbracket = 0; //圆括弧 int lbracket = 0; //大括弧 int sqs = 0; //单引号 int dqs = 0; //双引号 StringBuilder sb = new StringBuilder(); List<string> list = new List<string>(); foreach (char c in src) { if (sbracket == 0 && rbracket == 0 && lbracket == 0 && sqs == 0 && dqs == 0) { if (c == '<') sbracket++; else if (c == '(') rbracket++; else if (c == '{') lbracket++; else if (c == '\'') sqs++; else if (c == '"') dqs++; else if (c == ';') { if (sb.Length > 0) list.Add(sb.ToString()); sb = new StringBuilder(); continue; } sb.Append(c); } else if (sbracket != 0 || rbracket != 0 || lbracket != 0 || sqs != 0 || dqs != 0) { if (c == '<') sbracket++; else if (c == '(') rbracket++; else if (c == '{') lbracket++; else if (c == '\'' && sqs % 2 == 0) sqs++; else if (c == '"' && dqs % 2 == 0) dqs++; if (c == '>') sbracket--; else if (c == ')') rbracket--; else if (c == '}') lbracket--; else if (c == '\'' && sqs % 2 != 0) sqs--; else if (c == '"' && dqs % 2 != 0) dqs--; sb.Append(c); } } if (sb.Length > 0) list.Add(sb.ToString()); return list;}调用:string test = "try{xx(\"张三\");}catch(tt){};return true;";List<string> result = GetSplit(test);foreach (string s in result){ richTextBox2.Text += s + "\n";}输出:try{xx("张三");}catch(tt){}return truePS:最后的空串没要,应该是没有要的必要吧 vs2010tfs的连接问题 请教关于多线程操作控件的问题。 新手请教:更新datagridview数据并显示 我只想画个框 小高分求助,关于HttpWebResponse 返回 sharepoint被frontpage修改后就不能用页面来添加webpart了吗? 老问题 点击鼠标若干次,如何保存每次点击的坐标 请教:如何利用Session或者ViewState来存放dataSet c# 字符串解析 成键值类 然后再操作 生成字符串 图像变色 C#中又没有 %S 作为字符串替换阿?
showMSG("<div class='Desc'><u onclick=\"test('张三','111');\" style='cursor:hand'>[张三]</u>加入<u onclick=\"list('my'+this.innerHTML);\" style='cursor:hand'>同学会</u></div>")
是一个字符串,后面是一个空字串。
但这是一个最正常的例子。在举一列,try{xx("张三");}catch(tt){};return true;
这句就分为三部分,
一为try{xx("张三");}catch(tt){}
二为return true
三为一空字串
{
int sbracket = 0; //尖括弧
int rbracket = 0; //圆括弧
int lbracket = 0; //大括弧
int sqs = 0; //单引号
int dqs = 0; //双引号 StringBuilder sb = new StringBuilder(); List<string> list = new List<string>(); foreach (char c in src)
{
if (sbracket == 0 && rbracket == 0 && lbracket == 0 && sqs == 0 && dqs == 0)
{
if (c == '<')
sbracket++;
else if (c == '(')
rbracket++;
else if (c == '{')
lbracket++;
else if (c == '\'')
sqs++;
else if (c == '"')
dqs++;
else if (c == ';')
{
if (sb.Length > 0)
list.Add(sb.ToString());
sb = new StringBuilder();
continue;
} sb.Append(c);
}
else if (sbracket != 0 || rbracket != 0 || lbracket != 0 || sqs != 0 || dqs != 0)
{
if (c == '<')
sbracket++;
else if (c == '(')
rbracket++;
else if (c == '{')
lbracket++;
else if (c == '\'' && sqs % 2 == 0)
sqs++;
else if (c == '"' && dqs % 2 == 0)
dqs++; if (c == '>')
sbracket--;
else if (c == ')')
rbracket--;
else if (c == '}')
lbracket--;
else if (c == '\'' && sqs % 2 != 0)
sqs--;
else if (c == '"' && dqs % 2 != 0)
dqs--; sb.Append(c);
}
} if (sb.Length > 0)
list.Add(sb.ToString()); return list;
}
调用:
string test = "try{xx(\"张三\");}catch(tt){};return true;";
List<string> result = GetSplit(test);
foreach (string s in result)
{
richTextBox2.Text += s + "\n";
}输出:
try{xx("张三");}catch(tt){}
return true
PS:最后的空串没要,应该是没有要的必要吧