求个代码,关于多字符串查找匹配替换的问题 不好意思,可能表述的不够清楚,没办法从小学1年级开始,语文就没及格过。看下这个吧,实现的效果:http://www.212137.com/key2url.php 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 我写了一个方法,但是因为打不开楼主所给链接,所以不知道结果正不正确,当然,效率是否有楼主原来的高也就没法测试了,仅供参考前面做了一下排序,主要是为了解决一个关键字中包含另外一个关键字的问题,如果能保证数组中后面元素不包含前面元素内容,可以省去排序这一步实现环境:vs.net2005,c# string yourStr = "This is Test!<br> Welcome to http://www.212137.com! <br>中国 江苏 镇江 丹徒 高桥 !<br>这是乡土高桥,站长王乐欢迎您!<br>作为中国 江苏 镇江 丹徒 高桥的唯一门户网站,我们倡导文明健康的上网方式!"; string[] keyArr = new string[] { "镇江", "丹徒", "乡土高桥", "高桥", "南北大河", "江苏" }; List<int> list2 = new List<int>(); foreach (string s in keyArr) { list2.Add(s.Length); } int[] len = list2.ToArray(); Array.Sort(len, keyArr); Array.Reverse(keyArr); List<string> list1 = new List<string>(keyArr); StringBuilder sb = new StringBuilder(); sb.Append("("); foreach (string s in list1) { sb.Append(s); sb.Append("|"); } if (sb.Length > 0) { sb.Remove(sb.Length - 1, 1); } sb.Append(")"); string exp = sb.ToString(); string resultStr = Regex.Replace(yourStr, @"" + exp + "", @"<a href=""http://www.212137.com?key=$1"">$1</a>", RegexOptions.IgnoreCase); Response.Write(resultStr); 非常感谢lxcnn(过客)你是个好人发现正则还真是好,得学习下。要不推荐一些好的资料给我吧,电子文档或者书也行 我学正则的教程就一个http://www.regexlab.com/zh/regref.htm工具match tracer + vs.net学习方法,没有太好的方法,就是大量练习了 再问一个:原来的每个关键字都对应一个网址是有规律的 http://www.212137.com?key=关键字如果每个关键字都对应一个网址,并且这些网址是没有规律的,怎么办?如:string[] keyArr = new string[] { "镇江", "丹徒", "乡土高桥", "高桥", "南北大河", "江苏" };所对应的网址是string[] keyArr = new string[] { "www.zhenjiang.com", "www.2.com", "www.3.com", "www.4.com", "www.5.com", "www.6.com" };在这种情况下该怎么办呢? Hashtable ht;protected void Button1_Click(object sender, EventArgs e){ string yourStr = "This is Test!<br/> Welcome to http://www.212137.com! <br/>中国 江苏 镇江 丹徒 高桥 !<br/>这是乡土高桥,站长王乐欢迎您!<br/>作为中国 江苏 镇江 丹徒 高桥的唯一门户网站,我们倡导文明健康的上网方式!"; string[] keyArr = new string[] { "镇江", "丹徒", "乡土高桥", "高桥", "南北大河", "江苏" }; string[] keyArr2 = new string[] { "www.zhenjiang.com", "www.2.com", "www.3.com", "www.4.com", "www.5.com", "www.6.com" }; ht = new Hashtable(); for (int i = 0; i < keyArr.Length; i++) { ht[keyArr[i]] = keyArr2[i]; } List<int> list2 = new List<int>(); foreach (string s in keyArr) { list2.Add(s.Length); } int[] len = list2.ToArray(); Array.Sort(len, keyArr); Array.Reverse(keyArr); List<string> list1 = new List<string>(keyArr); StringBuilder sb = new StringBuilder(); sb.Append("("); foreach (string s in list1) { sb.Append(s); sb.Append("|"); } if (sb.Length > 0) { sb.Remove(sb.Length - 1, 1); } sb.Append(")"); string exp = sb.ToString(); string resultStr = Regex.Replace(yourStr, @"" + exp + "",new MatchEvaluator(regReplace), RegexOptions.IgnoreCase); Response.Write(resultStr);}private string regReplace(Match m){ return @"<a href="""+ ht[m.Value] +@""">"+ m.Value +"</a>";} 自增序列问题请教 richtextbox插入超链接问题 我想做个想QQ一样的消息提示框! 求助,,有谁做过航班查询,是否有航空公司航班查询接口可用? 有没有C#远程访问注册表的例子啊? PropertyGrid Help,请教一个关于C#简单的问题 C#的初学者(应用DataGrid)-->用Microsft的配置数据适配器Wizard创建和配置数据集的问题,它会自动为你加上一些你不要的列 通过多线程扫描局域网内的所有机器怎么实现? 有关字符串的操作函数 C#中TeeChart控件的使用 如何将DataGrid中的数据存到数据库中,在线等
前面做了一下排序,主要是为了解决一个关键字中包含另外一个关键字的问题,如果能保证数组中后面元素不包含前面元素内容,可以省去排序这一步
实现环境:vs.net2005,c# string yourStr = "This is Test!<br> Welcome to http://www.212137.com! <br>中国 江苏 镇江 丹徒 高桥 !<br>这是乡土高桥,站长王乐欢迎您!<br>作为中国 江苏 镇江 丹徒 高桥的唯一门户网站,我们倡导文明健康的上网方式!";
string[] keyArr = new string[] { "镇江", "丹徒", "乡土高桥", "高桥", "南北大河", "江苏" };
List<int> list2 = new List<int>();
foreach (string s in keyArr)
{
list2.Add(s.Length);
}
int[] len = list2.ToArray();
Array.Sort(len, keyArr);
Array.Reverse(keyArr);
List<string> list1 = new List<string>(keyArr);
StringBuilder sb = new StringBuilder();
sb.Append("(");
foreach (string s in list1)
{
sb.Append(s);
sb.Append("|");
}
if (sb.Length > 0)
{
sb.Remove(sb.Length - 1, 1);
}
sb.Append(")");
string exp = sb.ToString(); string resultStr = Regex.Replace(yourStr, @"" + exp + "", @"<a href=""http://www.212137.com?key=$1"">$1</a>", RegexOptions.IgnoreCase);
Response.Write(resultStr);
你是个好人发现正则还真是好,得学习下。要不推荐一些好的资料给我吧,电子文档或者书也行
http://www.regexlab.com/zh/regref.htm
工具
match tracer + vs.net学习方法,没有太好的方法,就是大量练习了
如果每个关键字都对应一个网址,并且这些网址是没有规律的,怎么办?如:
string[] keyArr = new string[] { "镇江", "丹徒", "乡土高桥", "高桥", "南北大河", "江苏" };所对应的网址是
string[] keyArr = new string[] { "www.zhenjiang.com", "www.2.com", "www.3.com", "www.4.com", "www.5.com", "www.6.com" };在这种情况下该怎么办呢?
{
string yourStr = "This is Test!<br/> Welcome to http://www.212137.com! <br/>中国 江苏 镇江 丹徒 高桥 !<br/>这是乡土高桥,站长王乐欢迎您!<br/>作为中国 江苏 镇江 丹徒 高桥的唯一门户网站,我们倡导文明健康的上网方式!";
string[] keyArr = new string[] { "镇江", "丹徒", "乡土高桥", "高桥", "南北大河", "江苏" };
string[] keyArr2 = new string[] { "www.zhenjiang.com", "www.2.com", "www.3.com", "www.4.com", "www.5.com", "www.6.com" };
ht = new Hashtable();
for (int i = 0; i < keyArr.Length; i++)
{
ht[keyArr[i]] = keyArr2[i];
}
List<int> list2 = new List<int>();
foreach (string s in keyArr)
{
list2.Add(s.Length);
}
int[] len = list2.ToArray();
Array.Sort(len, keyArr);
Array.Reverse(keyArr);
List<string> list1 = new List<string>(keyArr);
StringBuilder sb = new StringBuilder();
sb.Append("(");
foreach (string s in list1)
{
sb.Append(s);
sb.Append("|");
}
if (sb.Length > 0)
{
sb.Remove(sb.Length - 1, 1);
}
sb.Append(")");
string exp = sb.ToString(); string resultStr = Regex.Replace(yourStr, @"" + exp + "",new MatchEvaluator(regReplace), RegexOptions.IgnoreCase);
Response.Write(resultStr);
}private string regReplace(Match m)
{
return @"<a href="""+ ht[m.Value] +@""">"+ m.Value +"</a>";
}